给定一个非空字符串stringList序列,其中只包含拉丁字母表中的大写字母。对于所有以相同字母开头的字符串,确定它们的总长度,并获得“S-C”形式的字符串序列,其中S是stringList中以字符C开始的所有字符串的总长度。按总和的数值降序对得到的序列进行排序。对于相等的和值,按C字符代码的升序排列。
这个问题和我之前的一个问题有关。
一个有效的解决方案是:
stringList.GroupBy(x => x[0]).Select(g => $"{g.Sum(x => x.Length)}-{g.Key}");
问题是,对于这个给定的例子,我不知道在哪里添加OrderByDescending()/ThenBy()子句,以便获得正确排序的列表。
3条答案
按热度按时间0x6upsns1#
创建一个中间数据结构来存储所需的信息,并将其用于排序,然后生成输出:
niwlg2el2#
你就快成功了。最简单的方法是用你关心的属性创建一个更复杂的对象,用这些属性进行排序,然后在输出中只保留你想要的内容。比如:
qacovj5a3#
您可以在
GroupBy
之后添加一个Select
,将组转换为包含排序依据的匿名对象。然后,您可以使用OrderByDescending
和ThenBy
进行排序。之后,Select
返回所需的格式化字符串:或者,在带有
let
子句的查询语法中执行此操作,我发现这样更容易阅读: