[英]Sort an array in C#
給定以下數據類型
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
);
問題:如何按“標題代碼”字段排序?
FileDefinition[] filedefs = clsFiledefs.getFileDefinitions();
FileDefinition[] filedefs2 = SOMEMAGIC(filedefs);
我需要它來按最長字段到最短字段的順序排列數組。
我嘗試了Array.Sort(X,y)
,但這沒有用。 在此先感謝您提供所有答案。
使用以下內容:
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 ) );
你可以這樣做
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();
您應該使用List<FileDefinition>
(因為將項目添加到列表中作為數組要容易得多),而不是僅使用Linq
表達式OrderBy
對列表進行排序。
knownfiles.OrderBy(s => s.readNumBytes);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.