I have two lists of objects. List A and List B. I need to create List C which combines List A and List B into pairs. For example:
List A
object a1
object a2
object a3
List B
object b1
object b2
object b3
List C (creates pairs)
object c1 (object a1, object b1)
object c2 (object a2, object b2)
object c3 (object a3, object b3)
You could use the Enumerable.Zip() method in System.Linq.
IEnumerable<Tuple<A, B>> pairs = listA.Zip(listB, (a, b) => Tuple.Create(a, b));
Example using this resultant enumerable:
foreach (Tuple<A, B> pair in pairs)
{
A a = pair.Item1;
B b = pair.Item2;
}
Shame there's not an overload that automates the tupleation in .NET. Such an extension would look like this:
public static IEnumerable<Tuple<TFirst, TSecond>> Zip<TFirst, TSecond>(this IEnumerable<TFirst> first, IEnumerable<TSecond> second)
{
return first.Zip(second, Tuple.Create);
}
Which would mean you could then write code that looks like:
IEnumerable<Tuple<A, B>> pairs = listA.Zip(listB);
Note: Another option would be to create anonymous types instead of Tuple
but the downside to this approach is that you would not be able to (usefully) pass the resultant IEnumerable out of the method it is created in owing to the type not having a name.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With