C# 从两个不同的列表创建新的对象列表

C# 从两个不同的列表创建新的对象列表,c#,list,C#,List,我有两个相同复杂对象的列表,但每个列表都有不同的对象数据 我需要得到一组相同复杂对象的新列表,但要将它们组合起来以计算较小对象的数量。我不知道该怎么做。我试图找到一种合并它们的方法,使用addrange,并尝试使用字典,但这比我以前做的任何事情都要复杂。我已经找到了类似的答案,但对于我的特定场景,没有一个答案 以下是我可以对代码进行采样的最佳方法: List<Object1> ListA; List<Object1> ListB; ListA.count() = 5 L

我有两个相同复杂对象的列表,但每个列表都有不同的对象数据

我需要得到一组相同复杂对象的新列表,但要将它们组合起来以计算较小对象的数量。我不知道该怎么做。我试图找到一种合并它们的方法,使用addrange,并尝试使用字典,但这比我以前做的任何事情都要复杂。我已经找到了类似的答案,但对于我的特定场景,没有一个答案

以下是我可以对代码进行采样的最佳方法:

List<Object1> ListA;
List<Object1> ListB;

ListA.count() = 5
ListB.count() = 3

new List<Object1> Object1CombinedList;

1. List<Object1> Object1CombinedList (Object1 (from listA), Object1 (from ListB))
2. List<Object1> Object1CombinedList (Object1 (from listA), Object1 (from ListB))
3. List<Object1> Object1CombinedList (Object1 (from listA), Object1 (from ListB))
4. List<Object1> Object1CombinedList (Object1 (from listA), null))
5. List<Object1> Object1CombinedList (Object1 (from listA), null))
列表列表a;
名单b;
ListA.count()=5
ListB.count()=3
新列表对象1组合列表;
1.List Object1组合列表(Object1(来自listA)、Object1(来自ListB))
2.List Object1组合列表(Object1(来自listA)、Object1(来自ListB))
3.List Object1组合列表(Object1(来自listA)、Object1(来自ListB))
4.List Object1CombinedList(Object1(来自listA),null))
5.List Object1CombinedList(Object1(来自listA),null))
我想通过某种方式在两个独立的列表中循环,在进行过程中为每一对组合它们。(我原以为我可以用字典做到这一点,但没法做到)。最终的结果是,我需要一组新的列表(同样是所有相同的复杂对象),其长度等于两个列表中最长的列表的长度

新集合需要包含列表A和列表B中的匹配对,直到两个集合中较小的集合用尽,但对于较长列表的其余部分,仍然包含单个复杂对象

上面显示的五个列表是我需要从两个原始源代码列表中获取的示例。(附有他们的数据样本)


希望这有意义?以最好的方式问这个问题。

你的问题有点不清楚,但我相信你想要的是一种
ZipAll
方法。伪代码:

var listA = {1, 2, 3, 4}
var listB = {a, b, c}

ZipAll(listA, listB) == {(1, a), (2, b), (3, c), (4, null)}
幸运的是,您可以使用一个名为的库(披露:我是作者)

ISequence zipped=listA.AsSequence().ZipAll(listB,null,null);
免责声明:我写这篇文章是因为@dcastro在评论。我使用了类似的
ZipAll
方法,但从


您所追求的是将两个列表压缩在一起,形成一个新的列表。不幸的是,当其中一个列表完成时,内置的
Zip
方法就会停止,因此可以找到一个不这样做的实现—通常称为
ZipAll

然后这就变得相当简单了:

var listA = new List<string>(){"a1","a2","a3","a4","a5"};
var listB = new List<string>(){"b1","b2","b3"};

var combined = listA.ZipAll(listB, (a,b) => new List<string>(){a,b}).ToList();
for(var i=0;i<combined.Count;i++)
{
    Console.WriteLine("{0}: {1} | {2}",i,combined[i][0],combined[i][1]);
}
活生生的例子:

这个怎么样

            List<int> A = new List<int>() { 1, 2, 3 };
            List<int> B = new List<int>() { 1, 2, 3, 4 };

            List<int> C = A.Count > B.Count ? A : B;​
List A=newlist(){1,2,3};
列表B=新列表(){1,2,3,4};
列表C=A.计数>B.计数?A:B;​

它必须是一个
列表
(其中内部列表正好包含2个元素)?它可以是一个
列表吗?
不清楚你在问什么。你想要5个新列表吗?我需要它最终成为一组列表对象,但我不在乎它是从字典开始,还是先做其他什么。是的,结果是我需要5个新列表(最长列表的最大计数)。谢谢,我会尝试进一步研究,看看它是否有用。我无法添加外部库,但感谢您的考虑。我以最好的方式问了这个问题。。。我试图在反馈中给您留下a+,但由于我在这个问题上被否决了太多,所以它不适用。@numlaar如果您不能/不想依靠库来获得单个方法,请改用。@numlaar没关系。现在改进/重新表述你的问题还不算太晚:)好的,谢谢你,我会调查的。你至少明白我想表达的意思。作为一个没有经验的开发人员来到这里,尽你最大的努力提出一个问题,然后遭到抨击和否决,这是非常令人沮丧的。有点达不到目的。我不知道该怎么问才好。太好了!这正是我想要的。非常感谢。它只返回较大的列表。这不是OP想要的。阅读评论:是的,结果是我需要5个新列表(最长列表的最大计数)。确切地说,他需要一组5个列表。您的代码返回1个列表。阅读我和Jamiec的答案,了解OP在寻找什么(当然,这个问题有点神秘)。
0: a1 | b1
1: a2 | b2
2: a3 | b3
3: a4 | 
4: a5 | 
            List<int> A = new List<int>() { 1, 2, 3 };
            List<int> B = new List<int>() { 1, 2, 3, 4 };

            List<int> C = A.Count > B.Count ? A : B;​