我有排序问题:
假设我有3个文件,名称如下:
170120_140000_reservation.xml
170120_140001_details_0.xml
170120_140001_details_1.xml
格式为[日期] _ [时间] _ [类型] _ [索引] .xml
(索引不是强制性的)
我需要找到一种按3种条件排序的方法:
时间戳
类型(预订>详细信息,这将预先定义为“强”类型)
索引
我目前的代码如下:
List<FileDate> allFilesData = new List<FileDate>();
//each file is translated into a new "FileDate" object
allFilesData.Sort((x, y) => DateTime.Compare(x.timeStamp, y.timeStamp));
如果时间戳相等,我如何编写也会知道按类型比较的比较,如果时间戳和类型相等,我怎么写索引?
答案 0 :(得分:1)
假设您有一个包含date
,time
type
和index
属性的类。然后你可以使用OrderBy
和ThenBy
运算符LINQ来订购所需的项目:
allFilesData
.OrderBy(x => x.date)
.ThenBy(x => x.time)
.ThenBy(x => x.type)
.ThenBy(x => x.index);
如果您需要实施特定的比较行为,请查看IComparer Interface。
答案 1 :(得分:1)
您可以将更复杂的函数作为lambda传递给比较器,例如:
list of list
(假设类型和索引存储在 1 for i in train_data:
----> 2 train_set[i[-1]].append(i[:-1])
3
4 for i in test_data:
5 test_set[i[-1]].append(i[:-1])
TypeError: 'int' object is not subscriptable
(allFilesData.Sort((x, y) =>
{
int c = DateTime.Compare(x.timeStamp, y.timeStamp);
if (c == 0) {
c = x.type.Length.CompareTo(y.type.Length);
if (c == 0)
return x.index.CompareTo(y.index);
}
return c;
});
)和type
(string
)成员中。