如何获取.NET中List <string>的每个位置的最大字符(不循环)?

时间:2018-08-01 09:22:21

标签: c# linq lambda

我有以下代码:

var strings = new List<string>() { "012abc", "120ccc", "000aaa" };
var str = strings.Select(x => x.ToCharArray());

我需要获取作为字符串返回的每个位置的最大字符串。

  • 位置1:0、1和0 = 1
  • 位置2:1、2和0 = 2

结果字符串应为:122ccc。

是否存在可以用于此目的的Lambda / Linq查询,还是只需要遍历每个字符?

1 个答案:

答案 0 :(得分:3)

我认为所有字符串的长度都相等

解决方案1 ​​:无需使用Linq。

这个想法是:在循环中的位置max上获取i字符

var strings = new List<string>() { "012abc", "120ccc", "000aaa" };
var arrays = strings.Select(x => x.ToCharArray());

var charResult = new List<char>();

for(int i = 0; i < strings.First().Length;i++)
{
    charResult.Add(arrays.Select(x=> x[i]).Max());
}           

输出:

122ccc

解决方案2 :使用Linq

小提琴有效:https://dotnetfiddle.net/MPA8RA

这个想法:使用Aggregate比较每对char []。

var strings = new List<string>() { "012abc", "120ccc", "000aaa" };
var arrays = strings.Select(x => x.ToCharArray());          

var charResult = arrays.Aggregate((a, b) => b.Select((t,i) => (char)Math.Max(t, a[i])).ToArray());          

Console.Write(new string(charResult.ToArray()));

输出:

122ccc