1

我想在 c# 中合并两个数组列表中的所有数据。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 回答