我有一個5個列表,其中有相同的對象。我只是想將它們全部與那些屬性完好地結合到一個更大的列表中。將5個列表<object>合併成一個列表<object>
我想到了一個辦法,但我認爲有更好的辦法。
List<object> blah = new List<object>
foreach(object item in ObjectList1)
{
blah.Add(item);
}
如果你知道更好的方法來做到這一點讓我知道,在此先感謝!
我有一個5個列表,其中有相同的對象。我只是想將它們全部與那些屬性完好地結合到一個更大的列表中。將5個列表<object>合併成一個列表<object>
我想到了一個辦法,但我認爲有更好的辦法。
List<object> blah = new List<object>
foreach(object item in ObjectList1)
{
blah.Add(item);
}
如果你知道更好的方法來做到這一點讓我知道,在此先感謝!
var result = ObjectList1.Concat(ObjectList2).Concat(ObjectList3).
Concat(ObjectList4).Concat(ObjectList5).ToList()
我認爲所有的答案都很好,但這是我最後使用的那個。我投了所有其他答案=)〜 – rreeves 2012-02-15 22:16:47
這個答案與我的有什麼不同? – 2012-02-16 02:58:09
嘗試
ObjectList1.Concat(ObjectList2).Concat(ObjectList3).Concat(ObjectList4).Concat(ObjectList5).ToList()`
你可以使用任何List<T>.AddRange()
或LINQ:
foreach(var list in myLists)
bigList.AddRange(list);
如果OP已經有一個列表集合,他可以簡單地:'myLists.SelectMany(l => l)'。我的理解是他擁有不同的變量來保存列表。 – 2012-02-15 18:25:27
List<object> blah = ObjectList1
.Concat(ObjectList2)
.Concat(ObjectList3)
// ...
.ToList();
我不知道你在這裏做什麼。也許你應該將對象投射到特定的對象上。該代碼看起來對我來說是正確的,但它有點奇怪。
爲了提高可讀性,我建議......
List<object> blah = new List<object>
blah.AddRange(ObjectList1);
blah.AddRange(ObjectList2);
blah.AddRange(ObjectList3);
blah.AddRange(ObjectList4);
此代碼從你的問題:
:如果您使用AddRange
List<object> blah = new List<object>
foreach(object item in ObjectList1)
{
blah.Add(item);
}
...可能是更簡潔
List<object> blah = new List<object>
blah.AddRange(ObjectList1);
所以你可以加CA將AddRange添加5次或者將5個列表連接並將結果傳遞給AddRange。
目前尚不清楚你所說的「他們的所有屬性不變」的意思是什麼,但如果它意味着你的其他名單不同更具體的類型列表比object
,則沒有,你不能創建單個列表,這將使您能夠對列表成員進行強類型訪問。
編輯
看來,「他們所有的性質不變」是指,在新的列表中的對象具有相同的屬性值在舊列表中的對象。當然他們會,因爲他們是相同的對象!該列表並不包含對象,畢竟它們包含引用(因爲object
是引用類型)。新列表包含副本的引用,而不是對象的副本。
此功能...
static IEnumerable<T> Combine<T>(params IEnumerable<T>[] sources) {
return sources.SelectMany(s => s);
}
...可以這樣使用:
List<object> l1 = ... ;
List<object> l2 = ... ;
List<object> l3 = ... ;
List<object> l4 = ... ;
List<object> l5 = ... ;
var result = Combine(l1, l2, l3, l4, l5).ToList();
BTW,省略ToList
如果結果實際上並不需要是一個List
。
(當然這樣的工作將與任何名單的數量,而不是僅僅5)
或者,如果你只需要做一次,不希望引入只是對於全新的功能:
var result = new[] { l1, l2, l3, l4, l5 }.SelectMany(l => l).ToList();
或者,如果你關心性能超過可讀性,這樣做是爲了AVO內存重新分配列表大小調整:
var result = new List<object>(l1.Count + l2.Count + l3.Count + l4.Count + l5.Count);
result.AddRange(l1);
result.AddRange(l2);
result.AddRange(l3);
result.AddRange(l4);
result.AddRange(l5);
Whice .net框架? – 2012-02-15 18:02:46
.NET中必須存在一些庫,例如Java中的Guava,它可以在不實際創建新列表的情況下呈現聚合視圖? – 2012-02-15 18:04:31
「所有屬性完好無損」是什麼意思? – phoog 2012-02-15 18:07:40