[英]How to combine values of several lists into one in C#?
我正在尝试将不同列表的几个值合并到一行中。
例如:
然后生病 go 循环遍历所有列表,并且 output 应该是:
结果将被添加到一个 object
到目前为止,我尝试使用 foreach 循环遍历我的列表,但在调试之后很明显我的方法无法工作:
foreach (var item in list1){
foreach (var item2 in list2){
foreach (var item3 in list3){
string line = makeStringFrom(item, item2, item3);
}
}
}
但我不知道如何使它工作。
您还可以使用 LINQ 函数。
var listA = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
var listB = new List<string> { "A", "B", "C", "D" };
var listC = new List<string> { "!", "?", "-" };
var result = Enumerable.Range(0, Math.Max(Math.Max(listA.Count, listB.Count), listC.Count))
.Select(i => new
{
a = listA.ElementAtOrDefault(i),
b = listB.ElementAtOrDefault(i),
c = listC.ElementAtOrDefault(i)
}).ToList();
foreach (var item in result)
{
Console.WriteLine("{0} {1} {2}", item.a, item.b, item.c);
}
结果:
1 A !
2 B ?
3 C -
4 D
5
6
7
8
9
一般的方法是:
找出所有列表的最大长度
然后创建一个循环到 go 从 0 到最大长度-1
检查每个列表是否包含该项目的索引,如果是,则检索该值,否则返回 null
根据这些价值观建立你的生产线
你可以使用这个:
var A = new List<string>() { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
var B = new List<string>() { "A", "B", "C", "D" };
var C = new List<string>() { "!", "?", "-"};
var lists = new List<List<string>>() { A, B, C };
int count = 0;
foreach ( var list in lists )
count = Math.Max(count, list.Count);
var result = new List<List<string>>();
for ( int index = 0; index < count; index++ )
{
var item = new List<string>();
result.Add(item);
foreach ( var list in lists )
item.Add(index < list.Count ? list[index] : null);
}
foreach ( var list in result )
{
string str = "";
foreach ( var item in list )
str += ( item == null ? "(null)" : item ) + " ";
str.TrimEnd(' ');
Console.WriteLine(str);
}
我们创建了一个列表列表,因此您可以将其用于任意数量的列表。
接下来我们取这些列表的最大数量。
然后我们按照算法的指示解析它们:
如果您计划管理多个大型列表以优化 memory 字符串连接,则可以使用 StringBuilder。
Output
1 A !
2 B ?
3 C -
4 D (null)
5 (null) (null)
6 (null) (null)
7 (null) (null)
8 (null) (null)
9 (null) (null)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.