我如何对一系列结构进行排序?

我有一个包含歌曲数据的结构:

public struct uLib { public string Path; public string Artist; public string Title; public string Album; public string Length; } 

我的库包含一个这个uLib的数组。 我怎么用艺术家对这个数组进行排序? 有没有我可以在这种类型的数组上调用的本机排序函数,还是我必须“自己滚动”?

首先,这不应该是一个结构。 它大于16个字节,因此您无法获得具有结构的性能优势。 此外,它不代表单个值,因此在语义上使其成为结构是没有意义的。 只是让它成为一个类。

Array类有一个可以使用的Sort方法:

 Array.Sort(theArray, (x,y) => string.Compare(x.Artist,y.Artist)); 

如果您没有C#3,则使用委托而不是lambda表达式:

 Array.Sort(theArray, delegate(uLib x, uLib y) { return string.Compare(x.Artist,y.Artist) } ); 

编辑:
以下是您的数据类似于什么的示例:

 public class ULib { private string _path, _artist, _title, _album, _length; public string Path { get { return _path; } set { _path = value; } } public string Artist { get { return _artist; } set { _artist = value; } } public string Title { get { return _title; } set { _title = value; } } public string Album { get { return _album; } set { _album = value; } } public string Length { get { return _length; } set { _length = value; } } public ULib() {} public ULib(string path, string artist, string title, string album, string length) { Path = path; Artist = artist; Title = title; Album = album; Length = length; } } 

在C#中,有一个简短的财产forms。 不是为私有变量编写代码,而是使用setter和getter来访问它,而是自动创建:

 public string Path { get; set; } 

来自u的ULibArray命令由u.Artist选择你;

假设uLibs是一个IEnumerable ,你可以试试这个:

 uLibs.OrderBy(i => i.Artist) 

这使用密钥对uLib实例进行排序; 在这种情况下,您选择了Artist作为比较的关键。 可以针对您的其他字段进行类似的排序。

不使用OrderBy排序项目数组<>回答您的问题?

关心弗里德里希