我有兩個列表需要形成聯合,但我在.NET 2.0中,因此Union()方法顯得不可用。這些是整數列表,因此平等比較沒有問題。有什麼好辦法可以解決這個問題?在.NET 2.0中結合兩個List <T>的好方法?
回答
怎麼樣(使用字典鍵作爲一個哈希表):
public static List<T> Union<T>(List<T> first, List<T> second) {
List<T> newList = new List<T>(first.Count + second.Count);
Dictionary<T, object> firstItems = new Dictionary<T, object>(first.Count);
foreach (T item in first) {
newList.Add(item);
firstItems.Add(item, null);
}
foreach (T item in second) {
if (!firstItems.ContainsKey(item)) {
newList.Add(item);
}
}
return newList;
}
這將保持在first
和second
項目訂單,同時還使用O(1)檢查列表之間重複的項目
你可以只添加它們一起刪除重複的:
public List<T> Union<T>(List<T> firstList, List<T> secondList)
{
Dictionary<T, int> tmp = new Dictionary<T, int>();
foreach (T val in firstList)
{
tmp[val] = 1;
}
foreach (T val in secondList)
{
tmp[val] = 1;
}
return new List<T>(tmp.Keys);
}
使用字典可能會更改列表中元素的順序。 – 2009-11-22 02:25:49
而且會改變firstList作爲操作的一個副作用 – thecoop 2009-11-23 11:47:29
@CodeSavvyGeek兩個定義的聯合關聯和交換,順序無關緊要。 – SwDevMan81 2009-11-23 12:16:14
怎麼樣一個簡單的foreach,只增加已經不在列表中的元素:
foreach (int item in list2)
{
if (!list1.Contains(item))
{
list1.Add(item);
}
}
這將保留列表的順序。
如果列表很大,則包含可能會很慢。 – SwDevMan81 2009-11-22 01:56:50
你可以使用linqbridge,讓您使用LINQ到對象,同時還瞄準Framework 2.0中,如果您有Visual Studio 2008中
推,推,推移動到.NET 3.5。 LINQ和lambdas改變了你對代碼的看法(爲了更好,恕我直言)。
我們的打包軟件還不能使用.NET 3.5,因爲有些人可能還沒有安裝它(認爲XP機器由BOFH運行) – thecoop 2009-11-23 11:48:48
- 1. C#List <T> .ConvertAll在.NET 2.0中
- 2. 在C#2.0中比較兩個List <KeyValuePair <string,Object >>的正確方法
- 3. 合併兩個地圖<String,List>
- 4. 合併/加入兩個List <Tuple>
- 5. C#:比結合StartsWith和兩個ToUpperInvariant調用更好的方法
- 6. 如何將兩個List <Object[]>對象合併爲一個List <Object[]>
- 7. 在C#中交集兩個List <>#
- 8. 在.NET/C#2.0中合併兩個字符串數組?
- 9. .NET List最佳方法
- 10. 有沒有更好的方法來實現HashMap <String,List <HashMap <String,List <Details> >>>?
- 11. .NET 2.0中最好的數據訪問方法
- 12. 擴展方法在.NET 2.0中VS2008
- 13. 在.NET 2.0中使用擴展方法?
- 14. 請在兩個List <SelectListItem>
- 15. 在xslt 2.0中合併了兩個xml
- 16. 在.NET 2.0+中使用List(Of T)的集合有什麼優勢
- 17. Drools .NET 3.0 - List <> C#
- 18. 最好的方法,以配合在同一個表中的兩個記錄對
- 19. 將結果結合在兩個表中
- 20. 有沒有更好的方法來結合這兩個Linq表達式?
- 21. C#List <> Add()方法的性能
- 22. 結合兩種方法返回兩個不同的值
- 23. 如何合併兩個List <>參數?
- 24. 在.NET 2.0中排序IList <T>的最佳方法是什麼?
- 25. .NET Datagrid控件結合方法
- 26. 哪個.NET集合更快:枚舉foreach Dictionary <>。Values或List <>?
- 27. 最快的方式比較兩個List <CustomObject>
- 28. 在Scala中結合使用兩個MultiMaps
- 29. 在C#/。NET中合併兩個圖像
- 30. 通用函數爲兩個List <>
這裏的好主意,謝謝大家的貢獻! – larryq 2009-11-23 18:14:32
請注意,這不會首先刪除dups – SwDevMan81 2009-11-23 18:35:16