排序一个对象的列表,其中包含另一个对象的列表
本文关键字:列表 一个对象 包含另 排序 | 更新日期: 2023-09-27 18:09:33
好的,我正在寻找排序列表(UserList)的属性(WordList),虽然我需要(WordList)是由一个特定的属性首先排序。
整个Sort UserList方法不排序UserList是否我尝试通过(userName)或(WordList).(wordName)或(WordList).(amountof猜想)
public class User
{
public string userName;
public List<Word> wordList;
public User() { }
public User(string name, String word, int guesses)
{
this.userName = name;
wordList = new List<Word>();
Word theWord = new Word(word, guesses);
this.wordList.Add(theWord);
}
}
public List<User> SortUserList(String g)
{
String option = g.ToLowerInvariant();
switch(option){
case "name":
this.UserList.OrderBy(x=> x.userName);
break;
case "word":
this.UserList.OrderBy(k => k.wordList.OrderBy(w => w.wordName));
break;
case "guess":
this.UserList.OrderBy(m=> m.wordList.OrderBy(y => y.amountOfGuesses));
break;
}
return UserList;
}
public void Test()
{
User xor = new User("xor", "xadfs", 20);
User bob = new User("bob", "char", 3);
User james = new User("james", "adfsad", 200);
UserList.Add(bob);
UserList.Add(james);
UserList.Add(xor);
}
如果您想按用户的第一个单词(按时间顺序)排序,您可以在wordList
序列上使用Min
而不是内部OrderBy
。
您的代码的另一个问题是,您假设外部OrderBy
将更新源UserList
序列。它不;相反,它保持源不变,并返回一个枚举有序序列的新查询。您可以通过调用ToList
并返回结果来填充它。
case "name":
return this.UserList.OrderBy(x => x.userName).ToList();
case "word":
return this.UserList.OrderBy(k => k.wordList.Min(w => w.wordName)).ToList();
case "guess":
return this.UserList.OrderBy(m => m.wordList.Min(y => y.amountOfGuesses)).ToList();
如果您需要按列表的"top"元素排序,您可以使用FirstOrDefault()
提取它:
UserList.OrderBy(k => k.wordList.OrderBy(w => w.wordName).FirstOrDefault());
我认为这是你想要的,我还不太确定你到底在问什么:-)