1

C#の2つのarraylistのすべてのデータをマージしたいと思います。arraylistの一部のデータは、別のarraylistと同じになりました。マージ時に重複データは必要ありません。

ArrayList1   ArrayList2
    1             1
    2             2
    3             4
                  5

以下のコーディングを試してみました。しかし、結果は私が期待したものではありませんでした:

for(int i = 0; i<arrayList2;i++)
{
  for(int j = 0; j<arrayList1;j++)
  {
     if(arraylist1[i] == arraylist2[j])
     {
        newArraylist.add(arraylist[i]+"-same");
     }
     else
     {
        newArraylist.add(arraylist[i]+"-from arrayList2");
     }
  }
}

上記のコードの結果は次のとおりです。

newArrayList
   1 - same
   2 - same
   4 - from arraylist2
   5 - from arraylist2

私が望む結果:

 newArrayList
       1 - same
       2 - same
       3 - from arraylist1
       4 - from arraylist2
       5 - from arraylist2
4

6 に答える 6

4

最も簡単で簡単な方法は、LINQを使用することです

var collection1 = new ArrayList() { 1, 2, 3 };
var collection2 = new ArrayList() { 1, 2, 4, 5 };
var mergedList = new ArrayList();
mergedList.AddRange(collection1);
mergedList.AddRange(collection2.ToArray().Where(item => !collection1.ToArray().Contains(item)).ToList());
Console.WriteLine(String.Join(", ", mergedList.ToArray()));
Console.ReadLine();
于 2012-07-20T07:28:02.683 に答える
2

これはどう:

var arrayList1 = new ArrayList {1, 2, 3};
var arrayList2 = new ArrayList {1, 2, 4, 5};
var newList = new ArrayList();

foreach (var item in arrayList1)
{
    if(arrayList2.Contains(item))
    {
        newList.Add(string.Format("{0} - same", item));
        arrayList2.Remove(item);
    }
    else
    {
        newList.Add(string.Format("{0} - from arrayList1", item));
    }
}

foreach(var item in arrayList2)
{
    newList.Add(string.Format("{0} - from arrayList2", item));
}

これにより、次の結果が得られます。

1 - same
2 - same
3 - from arraylist1
4 - from arraylist2
5 - from arraylist2
于 2012-07-05T09:17:16.990 に答える
1

アイテムをループして、最初の配列に含まれていることを確認します。

foreach (int item in arrayList2)
{
    if (!arrayList1.Contains(item))
        arrayList1.Add(item);
}
于 2012-07-05T09:14:46.037 に答える
0

インデックスに基づいて比較していますが、機能しません。ArrayList1[2]を含むが3、をArrayList1[2]含む4

.Contains()番号が他のリストに存在するかどうかを確認するためにを使用する必要があります。

于 2012-07-05T09:08:39.117 に答える
0

コード

var collection1 = new ArrayList() { 1, 2, 3 };
var collection2 = new ArrayList() { 1, 2, 4, 5 };

var merge = collection1.ToArray().Union(collection2.ToArray()).Distinct();
var result = new List<String>();
foreach (var val in merge)
{
    var newString = string.Empty;
    if (collection1.Contains(val) && collection2.Contains(val))
        newString = val.ToString() + " - same";
    else if (collection1.Contains(val))
        newString = val.ToString() + " - from list 1";
    else
         newString = val.ToString() + " - from list 2";
    Console.WriteLine(newString);
    result.Add(newString);
}

出力を生成します

1 - same
2 - same
3 - from list 1
4 - from list 2
5 - from list 2
于 2012-07-05T09:16:53.113 に答える
0

最もクリーンなオプションは、Union (LINQ) を使用することです。それがどのように機能するかを調べるには、これをチェックしてください: http://www.dotnetperls.com/union

于 2012-07-20T07:36:10.050 に答える