如何创建对象,对来自两个列表在C#一个列表? [英] How do I create a single list of object pairs from two lists in C#?

查看:104
本文介绍了如何创建对象,对来自两个列表在C#一个列表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有对象的两个列表。名单A和名单B.我需要创建相结合的列表A和列表B到对C组名单。例如:

 列表A 
对象A1
对象A2
对象A3

文件清单b $ b $对象b B1
对象B2
对象B3

名单C(创建对)
对象C1(对象A1,对象B1)
对象C2(对象A2,对象B2)
对象C3(对象A3,对象B3)


解决方案

这将做到这一点:

 公共静态的IEnumerable<元组LT; T,U>> CombineWith< T,U>(这个IEnumerable的< T>首先,IEnumerable的< U>第二个)
{
使用(VAR firstEnumerator = first.GetEnumerator())
使用(VAR secondEnumerator =第二.GetEnumerator())
{
布尔hasFirst = TRUE;
布尔hasSecond = TRUE;

,而(
//只有调用MoveNext的,如果它没有最后一次失败
(hasFirst&安培;及(hasFirst = firstEnumerator.MoveNext()))
| //警告:不要改变||
(hasSecond&安培;及(hasSecond = secondEnumerator.MoveNext()))

{
收益率的回报。 Tuple.Create(
hasFirst firstEnumerator.Current:默认(T),
hasSecond secondEnumerator.Current:?默认设置(U)
);
}
}
}



编辑:我大大喜欢< A HREF =htt​​p://stackoverflow.com/questions/7110762/how-do-i-create-a-single-list-of-object-pairs-from-two-lists-in-c/7110781#7110781 >保罗的答案。


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)

解决方案

This would do it:

public static IEnumerable<Tuple<T, U>> CombineWith<T, U>(this IEnumerable<T> first, IEnumerable<U> second)
{
    using (var firstEnumerator = first.GetEnumerator())
    using (var secondEnumerator = second.GetEnumerator())
    {
        bool hasFirst = true;
        bool hasSecond = true;

        while (
            // Only call MoveNext if it didn't fail last time.
            (hasFirst && (hasFirst = firstEnumerator.MoveNext()))
            | // WARNING: Do NOT change to ||.
            (hasSecond && (hasSecond = secondEnumerator.MoveNext()))
            )
        {
            yield return Tuple.Create(
                    hasFirst ? firstEnumerator.Current : default(T),
                    hasSecond ? secondEnumerator.Current : default(U)
                );
        }
    }
}

Edit: I vastly prefer Paul's answer.

这篇关于如何创建对象,对来自两个列表在C#一个列表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆