Как сделать zip Python в C#?

Python zip функция делает следующее:

a = [1, 2, 3]
b = [6, 7, 8]
zipped = zip(a, b)

результат

[[1, 6], [2, 7], [3, 8]]
13
задан Jader Dias 11 March 2010 в 17:02
поделиться

4 ответа

Как насчет этого ?

C # 4.0 LINQ'S НОВЫЙ ОПЕРАТОР ZIP

public static IEnumerable<TResult> Zip<TFirst, TSecond, TResult>(
        this IEnumerable<TFirst> first,
        IEnumerable<TSecond> second,
        Func<TFirst, TSecond, TResult> func);
8
ответ дан 1 December 2019 в 23:47
поделиться

Также обратите внимание на Cadenza , в котором есть всевозможные изящные служебные методы.

В частности, изучите методы расширения Zip здесь: http://gitorious.org/cadenza/cadenza/blobs/master/src/Cadenza/Cadenza.Collections/Enumerable.cs#line1303

1
ответ дан 1 December 2019 в 23:47
поделиться

Решение 2: Аналогично C# 4.0 Zip, но вы можете использовать его в C# 3.0

    public static IEnumerable<TResult> Zip<TFirst, TSecond, TResult>(
        this IEnumerable<TFirst> first,
        IEnumerable<TSecond> second,
        Func<TFirst, TSecond, TResult> func)
    {
        using(var enumeratorA = first.GetEnumerator())
        using(var enumeratorB = second.GetEnumerator())
        {
            while (enumeratorA.MoveNext())
            {
                enumeratorB.MoveNext();
                yield return func(enumeratorA.Current, enumeratorB.Current);
            }
        }
    }
6
ответ дан 1 December 2019 в 23:47
поделиться

Решение 1:

IEnumerable<KeyValuePair<T1, T2>> Zip<T1, T2>(
    IEnumerable<T1> a, IEnumerable<T2> b)
{
    var enumeratorA = a.GetEnumerator();
    var enumeratorB = b.GetEnumerator();
    while (enumeratorA.MoveNext())
    {
        enumeratorB.MoveNext();
        yield return new KeyValuePair<T1, T2>
        (
            enumeratorA.Current,
            enumeratorB.Current
        );
    }
}
2
ответ дан 1 December 2019 в 23:47
поделиться