代码之家  ›  专栏  ›  技术社区  ›  community wiki 3 revs Hao Wooi Lim

转换现有代码片段以使用ARRAY.FACH

  •  0
  • community wiki 3 revs Hao Wooi Lim  · 技术社区  · 7 年前

    var aa = new [] { 1, 2, 3, 4, 5 };
    for (int i = 0; i < aa.length; ++i)
    {
        aa[i] = aa[i] + 1;
    }
    

    真的

    var aa = new [] { 1, 2, 3, 4, 5 };
    Arrary.ForEach(aa, a => a + 1);
    

    但是,如果我有这个:

    var aa = new [] { 1, 2, 3, 4, 5 };
    var ab = new [] { 1, 2, 3, 4, 5 };
    for (int i = 0; i < aa.length; ++i)
    {
        aa[i] = ab[i] + 1;
    }
    

    6 回复  |  直到 17 年前
        1
  •  4
  •   Jon Skeet    17 年前

    怎么样:

    aa = ab.ConvertAll(x => x+1);
    
        2
  •  2
  •   Matt Hamilton    17 年前

    这并不漂亮,但这将起作用(使用返回元素索引的Select()重载):

    var aa = new[] { 1, 2, 3, 4, 5 };
    var ab = new[] { 1, 2, 3, 4, 5 };
    
    Array.ForEach(
        aa.Select((x, i) => i).ToArray(),
        i => aa[i] = ab[i] + 1);
    

    在这种情况下,简单的“for”循环更容易理解。

        3
  •  2
  •   CMS    17 年前

    Enumerable.Range(0, ab.Length).Select(i => aa[i] = ab[i] + 1);
    // Will not work if aa.Length != ab.Length
    
        4
  •  1
  •   Jon Limjap    17 年前

    这不会很快,但可能会奏效

    var aa = new [] { 1, 2, 3, 4, 5 };
    var ab = new [] { 1, 2, 3, 4, 5 };
    Array.ForEach(aa, new Action(a => ab[Array.IndexOf(a)] + 1));
    

    不幸的是,对于具有重复元素的数组,这将不起作用。

        5
  •  0
  •   Colin    17 年前
    var aa = new[] { 1, 2, 3, 4, 5 };
    var ab = new[] { 1, 2, 3, 4, 5 };
    
    var index = 0;
    Array.ForEach(aa, a => { aa[index] = ab[index] + 1; index++; });
    

    这样不行吗?它的1 Array.ForEach,索引器位于Array.ForEach之外。

        6
  •  -1
  •   MichaelGG    17 年前

    但如果你想用C#做函数,你可能会有一个助手库,所以没什么大不了的。

    推荐文章