代码之家  ›  专栏  ›  技术社区  ›  CyclingFreak

如何在.NET中获取列表<string>的每个位置上的最大字符(无循环)?

  •  -1
  • CyclingFreak  · 技术社区  · 8 年前

    我有以下代码:

    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 回复  |  直到 8 年前
        1
  •  3
  •   aloisdg    8 年前

    我以为所有弦的长度都相等

    解决方案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()));
    

    输出:

    122立方厘米