【问题标题】:C# Sort by boolean equality to static string, followed by sort on integer number ascendingC#按布尔等于静态字符串排序,然后按整数升序排序
【发布时间】:2017-11-06 16:52:39
【问题描述】:

我有一个List<Data> myList 在哪里

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

我想对其进行排序

  1. 根据数据的Classifier 是否等于某个静态字符串,我们暂时称其为@"Alpha"(不等于第一个,等于第二个)
  2. 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 似乎不适合这个问题。有什么想法吗?

【问题讨论】:

  • OrderBy-ThenBy 是一个很好的解决方案。但是,请注意Sort 就地排序,OrderBy-ThenBy 生成排序序列而不更改原始列表。如果您需要更改原始列表,则必须进行比较。

标签: c# .net list sorting


【解决方案1】:

实际上,我认为OrderBy/ThenBy 组合在这里可以工作:

var result = myList.OrderBy(d => d.Classifier == "Alpha").ThenBy(d => d.Code);

【讨论】:

    【解决方案2】:

    据我所见,从预期的输出来看,并没有真正按单词排序,您可以实现一个bubble sort 比较世界位置,但要切换单词位置,切换整个注册表。

    然后对数字进行同样的处理,限制单词

    lambda, 2
    beta, 1
    beta, 6
    alfa, 4
    alfa, 5
    

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

    【讨论】:

      【解决方案3】:

      我首选的解决方案是 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&lt;Data&gt; 的实现,你可以传递给Sort

      【讨论】:

        猜你喜欢
        • 2023-03-25
        • 2021-12-20
        • 2019-12-22
        • 2013-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多