How can I sort a List by multiple T.attributes?

前端 未结 3 1356
走了就别回头了
走了就别回头了 2020-11-29 04:56

Let\'s say I have a List of Songs.

Song {
    public string Name = \"\";
    public int PlayOrder = 0;
    }

Now I want to sort them first

相关标签:
3条回答
  • 2020-11-29 05:25

    If you only have one preferred way of sorting your Song class, you should implement IComparable and/or IComparable<Song>:

    List<Song> songs = GetSongs();
    songs.Sort(); // Sorts the current list with the Comparable logic
    

    If you have multiple ways how you want to store your list, IEqualityComparer<T> is the interface you would like to implement. Then you can provide that comparer as argument in List<T>Sort().

    0 讨论(0)
  • 2020-11-29 05:38
    return final.OrderBy(s => s.PlayOrder).ThenBy(s => s.Name);
    
    0 讨论(0)
  • 2020-11-29 05:46

    If you want to continue using the sort method you will need to make your comparison function smarter:

    final.Sort((x, y) => {
        var ret = x.PlayOrder.CompareTo(y.PlayOrder);
        if (ret == 0) ret = x.Name.CompareTo(y.Name);
        return ret;
    });
    

    If you want to use LINQ then you can go with what K Ivanov posted.

    0 讨论(0)
提交回复
热议问题