0

次のデータ型が与えられた場合

public class FileDefinition
{
    public String headercode;
    public String text;
    public String fileext;
    public int readNumBytes;

    public FileDefinition(String headercode, String fileext, String text, int readNumBytes)
    {
        this.headercode = headercode;
        this.fileext = fileext;
        this.text = text;
        this.readNumBytes = readNumBytes;
    }
}

私はこのようなものを持っています:

    knownfiles[90] = new FileDefinition(
        "^2E524543",
        "ivr",
        "RealPlayer video file (V11 and later)",
        DEFAULT_READ_BYTES
    );

        knownfiles[89] = new FileDefinition(
            "^.{2,4}2D6C68",
            "lha",
            "Compressed archive file",
            DEFAULT_READ_BYTES
        );

        knownfiles[88] = new FileDefinition(
            "^2A2A2A2020496E7374616C6C6174696F6E205374617274656420",
            "log",
            "Symantec Wise Installer log file",
            DEFAULT_READ_BYTES
        );

質問: 「headercode」フィールドでソートするにはどうすればよいですか?

FileDefinition[] filedefs = clsFiledefs.getFileDefinitions();
FileDefinition[] filedefs2 = SOMEMAGIC(filedefs);

配列を最長のフィールドから最短のフィールドに並べ替えるために必要です。

しようとしましArray.Sort(X,y)たが、うまくいきませんでした。すべての回答に感謝します。

4

3 に答える 3

3

以下を使用します。

Array.Sort( filedefs, ( a, b ) => a.headercode.Length.CompareTo( b.headercode.Length ) );

元の配列を変更したくない場合

FileDefinition[] filedefs2 = (FileDefinition[])filedefs.Clone();
Array.Sort( filedefs2, ( a, b ) => a.headercode.Length.CompareTo( b.headercode.Length ) );
于 2013-08-04T11:52:13.303 に答える
2

あなたはこれを行うことができます

var sorted = filedefs.OrderBy(x=> x.headercode, StringComparer.InvariantCultureIgnoreCase).ToArray();
var sorted = filedefs.OrderByDescending(x=> x.headercode, StringComparer.InvariantCultureIgnoreCase).ToArray();

長さで注文したい場合

var sorted = filedefs.OrderBy(x=> x.headercode.Length).ToArray();
var sorted = filedefs.OrderByDescending(x=> x.headercode.Length).ToArray();
于 2013-08-04T11:46:25.103 に答える
0

単に式をList<FileDefinition>使用してリストを並べ替えるよりも、(配列にアイテムをリストに追加する方がはるかに簡単であるため) を使用する必要があります。LinqOrderBy

knownfiles.OrderBy(s => s.readNumBytes);

于 2013-08-04T11:36:03.983 に答える