2009-03-11 3 views
3

私は曲データを含む構造体を持っている:構造体の配列をソートするにはどうすればよいですか?

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

マイライブラリには、このuLibの配列で構成されます。私はこのアーティストをアーティストと言うとどのように並べ替えるのですか?このタイプの配列で呼び出せるネイティブソート関数はありますか、または「自分自身をロールバックする」必要がありますか?

答えて

16

まず、構造体であってはいけません。これは16バイトよりも大きいので、構造体を持つことによるパフォーマンスのメリットは得られません。また、単一の値を表すわけではないので、それを構造化するために意味的に意味をなさない。代わりにそれをクラスにしてください。

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

をあなたがC#3あなたの代わりにラムダ式のデリゲートを使用していない場合:

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

編集を

Arrayクラスには、使用可能Sort方法があります。
データがクラスとして表示される例を次に示します。

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#には、プロパティの短い形式があります。

public string Path { get; set; } 
+0

public class ULibでも –

+0

それは素晴らしい作品です。ありがとう。私は構造体を使用すべきではないと言いますが、このようなデータをどのように整理しますか? – Krakerjak

+0

これをクラスに入れ、パブリックフィールドの代わりにプロパティも使用します。 –

1

u由来のULibArrayのオーダー.Artist select u;

0

uLibsIEnumerable<T>されると仮定すると、あなたはこれを試すことができます。これは、キーを使用してuLibインスタンスをソート

uLibs.OrderBy(i => i.Artist) 

。この場合、比較するキーになるようにArtistを選択しています。他のフィールドと同様のソートが可能です。

+0

あなたがこれを行う場合は、しかし、その結果を失うことになります。正しい方法はこれです var orderedLibs = uLibs.OrderBy(i => i.Artist) – erikkallen

+0

はい、これは別のステートメントの一部として含まれることを意味します。あなたが結果をどうするかは、あなた次第です。 –

0

Sort array of items using OrderBy<>は、あなたの質問に答える ません:?代わりにプライベート変数とそれにアクセスするためのセッターとゲッターのためのコードを書くのは、これは自動的に作成していること

よろしく フリードリヒ

関連する問題