如何将两个列表的值合并在一起

时间:2012-05-03 10:48:09

标签: c# .net windows

例如我有:

public static List<int> actorList = new List<int>();
public static List<string> ipList = new List<string>();

他们都有各种各样的物品。

所以我尝试使用foreach循环将值(string和int)连接在一起:

  foreach (string ip in ipList)
    {
        foreach (int actor in actorList)
        {
            string temp = ip + " " + actor;
            finalList.Add(temp);
        }
    }

    foreach (string final in finalList)
    {
        Console.WriteLine(finalList);
    }

虽然回头看这个,但这很愚蠢,显然不会起作用,因为第一个forloop是嵌套的。

我对finalList列表的期望值:

actorListItem1 ipListItem1
actorListItem2 ipListItem2
actorListItem3 ipListItem3

依旧......

因此,两个列表中的值相互连接 - 对应于它们在列表顺序中的位置。

5 个答案:

答案 0 :(得分:6)

使用LINQ的ZIP功能

List<string> finalList = actorList.Zip(ipList, (x,y) => x + " " + y).ToList();


finalList.ForEach(x=> Console.WriteLine(x)); // For Displaying

或将它们合并为一行

actorList.Zip(ipList,(x,y)=>x+" "+y).ToList().ForEach(x=>Console.WriteLine(x));

答案 1 :(得分:3)

某些功能性优点怎么样?

listA.Zip(listB, (a, b) => a + " " + b)

答案 2 :(得分:2)

遍历索引:

for (int i = 0; i < ipList.Count; ++i)
{
    string temp = ipList[i] + " " + actorList[i];
    finalList.Add(temp);
}

您可能还希望在此之前添加代码以验证列表的长度是否相同:

if (ipList.Count != actorList.Count)
{
    // throw some suitable exception
}

答案 3 :(得分:2)

假设您可以使用.NET 4,您需要查看Zip extension method和提供的示例:

int[] numbers = { 1, 2, 3, 4 };
string[] words = { "one", "two", "three" };

// The following example concatenates corresponding elements of the
// two input sequences.
var numbersAndWords = numbers.Zip(words, (first, second) => first + " " + second);
foreach (var item in numbersAndWords)
    Console.WriteLine(item);
Console.WriteLine();

在此示例中,因为words中没有“4”的相应条目,所以在输出中省略了它。在开始之前,您需要进行一些检查以确保集合的长度相同。

答案 4 :(得分:1)

for(int i=0; i<actorList.Count; i++)
{
   finalList.Add(actorList[i] + " " + ipList[i]);
}