我有一个字符串数组,其中包含文件名,例如
ODP001(SC00).csv, OPD003(SC00).csv, ODP002(SC00).csv, SPL001(SC00).csv, SPL002(SC01).csv, ODP003(SC01).csv, ODP01(SC01).csv, ODP(SC02).csv
应按以下顺序排序:
SPL001(SC00).csv
ODP001(SC00).csv
ODP002(SC00).csv
ODP003(SC00).csv
SPL002(SC01).csv
ODP001(SC01).csv
ODP002(SC01).csv
ODP003(SC01).csv
说明:SC00
和SC01
是家庭/组的名称。并且SPL
是父母,ODP
是孩子。
我很困惑如何对这种类型的数组进行排序。有人可以帮我吗?
答案 0 :(得分:2)
也许不是最有效或最可靠的方法,但这
static void Main()
{
string[] strArr = new string[]
{
"ODP001(SC00).csv",
"ODP003(SC00).csv",
"ODP002(SC00).csv",
"SPL001(SC00).csv",
"SPL002(SC01).csv",
"ODP003(SC01).csv",
"ODP001(SC01).csv",
"ODP(SC02).csv"
};
var sorted = strArr
.OrderBy(s => s.Substring(s.IndexOf("(")))
.ThenByDescending(s => s.Substring(0,3))
.ThenBy(s => s.Substring(3));
Console.WriteLine(string.Join("\n", sorted));
}
将显示:
SPL001(SC00).csv
ODP001(SC00).csv
ODP002(SC00).csv
ODP003(SC00).csv
SPL002(SC01).csv
ODP001(SC01).csv
ODP003(SC01).csv
ODP(SC02).csv
您当然可以创建一个字符串比较器,或者一个看起来像这样的类:
public class MyClass
{
public MyClass(string filename)
{
// initialize the fields according to the filename (for example:)
int typeLength = 3;
int indexOpen = filename.IndexOf("(");
int indexClose = filename.IndexOf(")");
Type = filename.Substring(0,typeLength);
int.TryParse(filename.Substring(typeLength,indexOpen-typeLength),out Order);
int.TryParse(filename.Substring(indexOpen+3, indexClose-indexOpen-2),out SCOrder);
}
public string Type {get;set;}
public int Order {get;set;}
public int SCOrder {get;set;}
}
然后:
strArr.Select(s => new MyClass(s))
.OrderBy(o => o.SCOrder)
.ThenByDescending(o => o.Type)
.ThenBy(o => o.Order);