Python的C#等价物';s itertools.chain

本文关键字:itertools chain 等价物 Python | 更新日期: 2023-09-27 18:29:21

Python的itertools.chain方法的C#等价物是什么(如果有的话)?

Python示例:

l1 = [1, 2]
l2 = [3, 4]
for v in itertools.chain(l1, l2):
    print(v)

结果:
1
2
3
4

请注意,我不想制作一个将前两个列表结合在一起的新列表,然后再进行处理。我想要itertools.chain通过不实例化这个组合列表来节省内存/时间。

Python的C#等价物';s itertools.chain

您可以使用LINQ:中的Concat扩展方法在C#上执行同样的操作

l1.Concat(l2)

LINQ使用延迟执行模型,因此不会创建新的列表。

Enumerable.Concat(MSDN)

var l1 = new List<int>() { 1, 2 }; 
var l2 = new List<int>() { 3, 4 }; 
foreach(var item in Enumerable.Concat(l1, l2))
{
    Console.WriteLine(item.ToString()) 
}

我已经开始构建自己的c#等价物itertools。这是我为chain设计的。优美简洁,保留了一些Python的魅力。以下是Chain的两个实现。编译器似乎无法区分调用签名,所以请使用最适合您的签名。

    public static IEnumerable<T> Chain<T>(IEnumerable<IEnumerable<T>> collection)
    {
        foreach (var innerCollection in collection)
        {
            foreach (var item in innerCollection)
            {
                yield return item;
            }
        }
    }
    public static IEnumerable<T> Chain<T>(params IEnumerable<T>[] collection)
    {
        foreach (var innerCollection in collection)
        {
            foreach (var item in innerCollection)
            {
                yield return item;
            }
        }
    }