排序一个对象的列表,其中包含另一个对象的列表

本文关键字:列表 一个对象 包含另 排序 | 更新日期: 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());

我认为这是你想要的,我还不太确定你到底在问什么:-)