結合を形成する必要がある 2 つのリストがありますが、.NET 2.0 を使用しているため、Union() メソッドが使用されていないように見えます。これらは整数のリストなので、等値比較に問題はありません。これについて行く良い方法は何ですか?
4 に答える
3
それらを一緒に追加して、重複を削除することができます:
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-22T01:00:54.697 に答える
3
(辞書キーをハッシュテーブルとして使用)についてはどうですか:
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) チェックが引き続き使用されます。
于 2009-11-23T11:45:31.567 に答える
1
Visual Studio 2008 を使用している場合は、 linqbridgeを使用して、Framework 2.0 をターゲットにしながら LINQ to Objects を使用できます。
そして、プッシュ、プッシュ、プッシュして.NET 3.5に移行します。LINQ とラムダは、コードに対する考え方を変えます (より良いのは、私見です)。
于 2009-11-22T05:16:59.850 に答える
1
まだリストにない要素のみを追加する単純な foreach はどうですか。
foreach (int item in list2)
{
if (!list1.Contains(item))
{
list1.Add(item);
}
}
これにより、リストの順序が保持されます。
于 2009-11-22T01:55:14.353 に答える