假设我有一首歌曲列表。
Song {
public string Name = "";
public int PlayOrder = 0;
}
现在我想首先按PlayOrder对它们进行排序,从零开始按名称按字母顺序排序。
因此,一组示例排序结果将是(Name,PlayOrder):
/*
Pachelbel's Canon, 0
A Happy Song, 4
Beethoven's 5th, 4
Some Other Song, 7
*/
按字母顺序查看PlayOrder = 4的顺序?这就是我想要的。
现在我只能按一个字段排序:
List<Song> final = new List<Song>();
...
final.Sort((x, y) => x.PlayOrder.CompareTo(y.PlayOrder));
return final;
如何按照上面所示的名称进行排序?
答案 0 :(得分:49)
return final.OrderBy(s => s.PlayOrder).ThenBy(s => s.Name);
答案 1 :(得分:25)
如果您想继续使用sort方法,则需要使比较功能更加智能化:
final.Sort((x, y) => {
var ret = x.PlayOrder.CompareTo(y.PlayOrder);
if (ret == 0) ret = x.Name.CompareTo(y.Name);
return ret;
});
如果您想使用LINQ,那么您可以使用K Ivanov发布的内容。
答案 2 :(得分:0)
如果只有一种首选的方式对歌曲class
进行排序,则应实现IComparable
和/或IComparable<Song>
:
List<Song> songs = GetSongs();
songs.Sort(); // Sorts the current list with the Comparable logic
如果您有多种方式来存储列表,IEqualityComparer<T>
是您要实现的接口。然后,您可以在List<T>Sort()
中提供该比较器作为参数。