我有List<Data> myList
其中
public class Data
{
public string Classifier;
public int Code;
}
我希望对其进行排序
Classifier
是否等于某个静态字符串,我们现在只称它为@"Alpha"
(非等于第一,等于第二)< / LI>
Code
升序。所以输入数据
{
"Beta", 6
"Alpha", 4
"Lambda", 2
"Beta", 1
"Alpha", 5
}
会导致
{
"Beta", 1
"Lambda", 2
"Beta", 6
"Alpha", 4
"Alpha", 5
}
具体来说,我希望alpha以数字的升序排列到列表的底部。
我不确定如何实施.Sort Comparison<Data>
实例来支持这一点,.OrderBy
似乎不适合这个问题。有什么想法吗?
答案 0 :(得分:4)
我首选的解决方案是Ian Ray使用OrderBy-ThenBy
对列表进行排序的解决方案。
如果您需要就地排序该怎么办?
使用较小的部件构建解决方案,每个部件都清楚正确。
Comparison<int> intComparison =
(x, y) => x == y ? 0 : (x < y ? -1 : 1);
Comparison<bool> boolComparison =
intComparison(x ? 1 : 0, y ? 1 : 0);
Comparison<string> alphaComparison =
(x, y) => boolComparison(x == "Alpha", y == "Alpha");
Comparison<Data> dataComparison =
(x, y) => {
int a = alphaComparison(x.Classifier, y.Classifier);
return (a != 0) ? a : intComparison(x.Code, y.Code);
};
现在您有Comparison<Data>
的实施,您可以转到Sort
。
答案 1 :(得分:3)
实际上,我认为OrderBy
/ ThenBy
组合可以在这里工作:
var result = myList.OrderBy(d => d.Classifier == "Alpha").ThenBy(d => d.Code);
答案 2 :(得分:0)
据我所知,从预期的输出来看,并没有真正按照单词排序,你可以实现bubble sort
比较世界位置,但是切换单词位置,切换整个注册表。
然后对数字进行相同的处理,限制单词
lambda, 2
beta, 1
beta, 6
alfa, 4
alfa, 5
注意按字词分组,或者您可以对数字进行冒泡排序并将位置切换到整个注册表。