【问题标题】:Sorting a formatted LINQ query对格式化的 LINQ 查询进行排序
【发布时间】:2022-12-01 04:42:26
【问题描述】:

给出了一个非空字符串 stringList 序列,仅包含拉丁字母表的大写字母。对于以相同字母开头的所有字符串,确定它们的总长度并获得形式为“S-C”的字符串序列,其中 S 是 stringList 中以字符 C 开头的所有字符串的总长度。对结果序列按总和数值的降序排列,对于总和的相等值,按 C 字符代码的升序排列。

这个问题与我之前的一个问题有关。

一种有效的解决方案是:

stringList.GroupBy(x => x[0]).Select(g => $"{g.Sum(x => x.Length)}-{g.Key}");

问题是对于这个给定的示例,我不知道在哪里添加 OrderByDescending()/ThenBy() 子句以获得正确排序的列表。

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    您快到了。最简洁的方法是使用您关心的属性创建一个更复杂的对象,使用这些对象进行排序,然后只在输出中保留您想要的内容。喜欢:

    stringList
        .GroupBy(x => x[0])
        .Select(g => new {
            Len = g.Sum(x => x.Length),
            Char = g.Key,
            Val = $"{g.Sum(x => x.Length)}-{g.Key}"
        })
        .OrderByDescending(x => Len)
        .ThenBy(x => x.Char)
        .Select(x => x.Val);
    

    【讨论】:

      猜你喜欢
      • 2016-10-27
      • 1970-01-01
      • 1970-01-01
      • 2011-09-25
      • 1970-01-01
      • 2011-10-31
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多