.NET 3.1下Linq按条件生成新集合的问题求助
.NET 3.1 Linq 实现修正方案
问题回顾
需要实现函数Foo(IEnumerable<string>),满足以下需求:
- 提取每个字符串的最后一个字符并转为大写,将这些字符拼接成字符串;
- 按原字符串的长度分组,每组对应结果中的一个元素;
- 最终结果按元素长度降序排列。
输入示例:new[] { "bc", "sd", "ac", "sdf", "ewr" }
预期输出:new[] { "CCD", "RF" }
错误代码问题分析
你的代码存在两个核心问题:
- 变量名不匹配:函数参数是
strCollection,但代码中使用了未定义的stringList,会导致编译错误; - 逻辑偏离需求:当前仅将分组的长度键反转后转为字符串,完全没有处理字符提取、大写转换及拼接的核心逻辑。
正确实现代码
IEnumerable<string> Foo(IEnumerable<string> strCollection) { return strCollection // 按原字符串长度分组 .GroupBy(str => str.Length) // 对每个分组,提取最后一个字符转大写并拼接 .Select(group => string.Concat(group.Select(str => char.ToUpper(str.Last())))) // 按结果字符串长度降序排列 .OrderByDescending(resultStr => resultStr.Length); }
代码说明
- 分组:使用
GroupBy按输入字符串的长度分组,直接满足按长度分组的需求; - 字符处理与拼接:对每个分组,遍历其中的字符串,提取最后一个字符并转为大写,再通过
string.Concat拼接成单个字符串; - 排序:最后用
OrderByDescending按结果字符串的长度降序排列,符合最终排序要求; - 由于输入集合已按升序排列,分组内的元素会保留原顺序,因此拼接出的字符顺序与输入一致(对应示例中的"CCD"和"RF")。
内容的提问来源于stack exchange,提问作者DevMis
相关产品推荐
相关产品推荐

