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

本文关键字:列表 合并 在一起 两个 | 更新日期: 2023-09-27 18:32:57

例如,我有:

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

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

所以我尝试使用 foreach 循环将值(字符串和 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是嵌套的。

我对最终列表列表的预期值:

actorListItem1 ipListItem1
actorListItem2 ipListItem2
actorListItem3 ipListItem3

等等..

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

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

使用 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));

一些功能的好处呢?

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

假设您可以使用 .NET 4,您需要查看 Zip 扩展方法和提供的示例:

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"条目,所以从输出中省略了它。在开始之前,您需要进行一些检查以确保集合的长度相同。

遍历索引:

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
}
for(int i=0; i<actorList.Count; i++)
{
   finalList.Add(actorList[i] + " " + ipList[i]);
}