How would I sort through an array of structs?

后端 未结 3 1790
后悔当初
后悔当初 2020-12-21 06:37

I have a struct containing song data:

public struct uLib
    {
        public string Path;
        public string Artist;
        public string Title;
                


        
相关标签:
3条回答
  • 2020-12-21 07:12

    from u in ULibArray order by u.Artist select u;

    0 讨论(0)
  • 2020-12-21 07:26

    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; }
    
    0 讨论(0)
  • 2020-12-21 07:29

    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.

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