代码之家  ›  专栏  ›  技术社区  ›  Richard Neil Ilagan

C#/PHP:在C#中是否有PHP的array#map()函数的等价物?

  •  4
  • Richard Neil Ilagan  · 技术社区  · 16 年前

    我今天一直在思考这个问题,我有一种唠叨的感觉,这是一个简单的实现,我只是今天的出路,但无论如何,这是。

    而不是像这样表演

    // assume that I have a populated string[] myString
    for (int i = 0; i < myString.Length; i++) {
        myString[i] = myString[i].Equals(string.Empty) ? "foo" : "bar;
    }
    

    我想做一些类似PHP的事情 array_map()

    C有能力进行这种操作吗?

    3 回复  |  直到 14 年前
        1
  •  6
  •   NullUserException Mark Roddy    16 年前

    使用扩展方法:

    Func<string, string> mapFun = n => n.Equals(string.Empty) ? "foo" : "bar";
    Enumerable<string> newNames = names.Select(mapFun);
    

    Func 直接:

    IEnumerable<string> newNames = names.Select(n => n.Equals(string.Empty) ? "foo" : "bar");
    

    如图所示 ideone . 以下是一些或多或少等效的其他函数:

    PHP                C#
    -------------------------------
    array_map()       .Select()
    array_filter()    .Where()
    array_reduce()    .Aggregate()
    

    MSDN参考号:

    Enumerable Methods

        2
  •  2
  •   Timwi    16 年前

    array_map() 被称为 Select()

    var result = array.Select(item => item == "" ? "foo" : "bar");
    

    对于这样的操作,请考虑使用 IEnumerable<T> T[] (数组),但如果已经有数组,则可以使用它,因为 T[] 实际实施 .

    作为奖金,相当于 array_filter() 被称为 Where() :

    var nonEmpty = array.Where(item => item != "");
    

    如果你想知道还有什么其他的方法,有 a pretty good list with examples on MSDN .

        3
  •  1
  •   Billy ONeal IS4    16 年前

    不,因为PHP数组没有(!)与C#数组相同。PHP数组是哈希表,更像C# System.Collections.Hashtable System.Collections.Generic.Dictionary<k, v> .

    不过,假设我正确读取了您的伪代码,您可以通过LINQ查询执行您想要的操作:

    var result = from item in collection
                 select item.Empty() ? "foo" : "bar";
    

    我不明白为什么你会认为像array\u map这样的东西会比迭代快——不管你怎么看,迭代总会在某处进行。在PHP中,使用内置函数可以提高速度,因为PHP是解释的,而 array_map 是编译的;但C是一种编译语言。

    编辑

    var result = from item in array
                 select Callback(item);
    

    基本上就是你想要的。但不知道如何将“回调”位塞进函数中。

    推荐文章