2015-11-17 2 views
-3

У меня есть класс User, который имеет два атрибута: UserID и ParentUserID. Это подразумевает, что Пользователь имеет отношение к себе. Вот определение класса:Получить вложенных пользователей, используя рекурсию в C#

public class User 
{ 
    public User() { } 
    public User(string userid, string parentuserid) 
    { 
     this.UserID = userid; 
     this.ParentUserID = parentuserid; 
    } 
    public string UserID; 
    public string ParentUserID; 
} 

Мне нужно реализовать метод, который должен возвращать список пользователей, которые существуют в полной иерархии против UserID. Я считаю, что код будет намного проще с помощью Recursion, но я не смогу выполнить его самостоятельно.

public List<User> SubUsersHierarchy(List<User> users, string userid, int currentIndex) 
    { 
     List<User> subUsers = new List<User>(); 
     if (currentIndex >= users.Count) 
     { } 
     else 
     { 

     } 
     return users; 
    } 

Клиент образец выглядит следующим образом:

List<User> users = new List<User>(); 
User user1 = new User("User2","User1"); 
User user2 = new User("User3", "User1"); 
User user3 = new User("User4", "User3"); 
User user4 = new User("User5", "User2"); 
users.Add(user1); 
users.Add(user2); 
users.Add(user3); 
users.Add(user4); 
List<User> subUsers = SubUsersHierarchy(users, "User1", 0); 

Выход указанного вызова должен быть:

User2, User3, User4, User5

+1

'' User1 "' не существует в списке пользователей. –

+1

Извините, но StackOverflow не является службой записи кода. Голосование закрывается. –

+0

'Список subUsers = users.FindAll (u => u.ParentUserID ==" User1 ");' –

ответ

0

Я могу достичь своей цели, используя следующий код. Понял, что это не слишком сложно.

static List<User> users = null; 
    static void Main(string[] args) 
    { 
     users = new List<User>(); 
     User user1 = new User("User2","User1"); 
     User user2 = new User("User3", "User1"); 
     User user3 = new User("User4", "User3"); 
     User user4 = new User("User5", "User2"); 
     users.Add(user1); 
     users.Add(user2); 
     users.Add(user3); 
     users.Add(user4); 

     List<User> subUsersList = new List<User>(); 
     SubUsersHierarchy("User1", subUsersList, 1, 10); 
     foreach (User user in subUsersList) 
     { 
      Console.WriteLine(user.UserID); 
     } 
    } 

    public static void SubUsersHierarchy(string userid, List<User> subUsersList, int currentLevel, int maxLevel) 
    { 
     if (currentLevel > maxLevel) 
      return; 
     List<User> subUsers = GetSubUsers(userid); 

     if (subUsers.Count == 0) 
      return; 

     int index = 0; 
     for (index = 0; index < subUsers.Count; index++) 
     { 
      User user = subUsers[index]; 
      subUsersList.Add(user); 
      SubUsersHierarchy(user.UserID, subUsersList, currentLevel + 1, maxLevel); 
     } 
    } 

    public static List<User> GetSubUsers(string userid) 
    { 
     List<User> subusers = new List<User>(); 
     foreach (User user in users) 
     { 
      if (user.ParentUserID == userid) 
       subusers.Add(user); 
     } 
     return subusers; 
    } 
} 
Смежные вопросы