我有以下代码:
var strings = new List<string>() { "012abc", "120ccc", "000aaa" };
var str = strings.Select(x => x.ToCharArray());
我需要获取作为字符串返回的每个位置的最大字符串。
结果字符串应为:122ccc。
是否存在可以用于此目的的Lambda / Linq查询,还是只需要遍历每个字符?
答案 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