C#按布尔相等性排序为静态字符串,然后按整数提升排序

时间:2017-06-05 20:18:34

标签: c# .net list sorting

我有List<Data> myList其中

public class Data
{
    public string Classifier;
    public int Code;
}

我希望对其进行排序

  1. 根据数据Classifier是否等于某个静态字符串,我们现在只称它为@"Alpha"(非等于第一,等于第二)< / LI>
  2. Code升序。
  3. 所以输入数据

        {
          "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似乎不适合这个问题。有什么想法吗?

3 个答案:

答案 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

注意按字词分组,或者您可以对数字进行冒泡排序并将位置切换到整个注册表。