I have a struct containing song data:
public struct uLib
{
public string Path;
public string Artist;
public string Title;
from u in ULibArray order by u.Artist select u;
First of all, that should not be a struct. It's larger than 16 bytes, so you don't get the performance benefits of having a struct. Also, it doesn't represent a single value, so it doesn't make sense semantically to make it a struct. Just make it a class instead.
The Array
class has a Sort
method that you can use:
Array.Sort(theArray, (x,y) => string.Compare(x.Artist,y.Artist));
If you don't have C# 3 you use a delegate instead of the lambda expression:
Array.Sort(theArray, delegate(uLib x, uLib y) { return string.Compare(x.Artist,y.Artist) } );
Edit:
Here's an example of what your data could look like as a class:
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;
}
}
In C# there there is a short form for a property. Instead of writing code for a private variable and a setter and getter to access it, this creates that automatically:
public string Path { get; set; }
Assuming uLibs
is an IEnumerable<T>
, you can try this:
uLibs.OrderBy(i => i.Artist)
This sorts the uLib
instances by using a key; in this case, you've selected Artist to be the key to compare against. Similar sorting is possible against your other fields.