簡體   English   中英

從兩個不同的列表創建新的對象列表

[英]Create new list of objects from two different lists

我有兩個相同復雜對象的列表,但每個列表都有不同的對象數據。

我需要獲得一組相同復雜對象的新列表,但將它們組合起來計算較小對象的數量。 我不知道該怎么做。 我試圖找到一種方法來聯合它們,做 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 的匹配對,直到兩個集合中較小的一個用完,但對於較長列表的其余部分,仍然包含單個復雜對象。

上面顯示的五個列表是我需要從兩個原始源列表中獲取的示例。 (帶有他們的數據樣本)。

希望這是有道理的? 以最好的方式問這個問題。

您的問題有點不清楚,但我相信您想要的是ZipAll方法。 偽代碼:

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

ZipAll(listA, listB) == {(1, a), (2, b), (3, c), (4, null)}

幸運的是,您可以為此使用一個名為Sequences的庫(披露:我是作者)。

ISequence<Tuple<Object1, Object1>> 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]);
}

輸出是

0: a1 | b1
1: a2 | b2
2: a3 | b3
3: a4 | 
4: a5 | 

現場示例: http : //rextester.com/PULLI83949

那這個呢

            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;​

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM