例如我有:
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
依旧......
因此,两个列表中的值相互连接 - 对应于它们在列表顺序中的位置。
答案 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]);
}