如何像函数式编程语言一样将一个列表映射到另一个列表

本文关键字:列表 何像 一个 映射 另一个 函数 一样 编程语言 | 更新日期: 2023-09-27 18:30:11

我经常面临将一个列表的元素转换为另一个转换了相同元素的列表的问题。示例:

List<string> numbers = ...;
List<int> parsedNumbers = new List<int>();
foreach(var n in numbers)
  parsedNumbers.Add(parse(n));

在C#中,是否可以用另一种更简单的方式进行映射?类似numbers.Map(x -> parse(x))

如何像函数式编程语言一样将一个列表映射到另一个列表

var parsedNumbers = numbers.Select(n=>int.Parse(n)).ToList();

您也可以使用List的ConvertAll方法。

var parsedNumbers = numbers.ConvertAll(n => int.Parse(n));

AND较短版本

var parsedNumbers = numbers.Select(int.Parse).ToList();
var parsedNumbers = numbers.ConvertAll(int.Parse);

看起来您想要使用Linq中选择

using System.Linq;
[TestClass]
public class SelectFixture {
    private static int Parse(string str) {
        return int.Parse(str);
    }
    [TestMethod]
    public void MapStringsToInts() {
        var expected = new[] {1, 2, 3, 4, 5};
        var strings = new List<string> { "1", "2", "3", "4", "5" };
        var numbers = strings.Select(Parse).ToList();
        CollectionAssert.AreEquivalent(expected, numbers);
    }
}