我有一个包含歌曲数据的结构:
public struct uLib
{
public string Path;
public string Artist;
public string Title;
public string Album;
public string Length;
}
我的库包含一个uLib
数组。我怎么用艺术家对这个阵列进行排序?我可以在这种类型的数组上调用本机排序函数,还是必须“自己动手”?
答案 0 :(得分:16)
首先,那不应该是一个结构。它大于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#中有一个属性的简短形式。不是为私有变量编写代码,而是使用setter和getter来访问它,而是自动创建:
public string Path { get; set; }
答案 1 :(得分:1)
答案 2 :(得分:0)
假设uLibs
是IEnumerable<T>
,您可以尝试:
uLibs.OrderBy(i => i.Artist)
使用密钥对uLib
个实例进行排序;在这种情况下,您选择了Artist作为比较的关键。对您的其他领域进行类似的排序。
答案 3 :(得分:0)
不Sort array of items using OrderBy<> 回答你的问题?
此致 弗里德里希