C#如何将多个object对象列表按索引拼接输出为单列内容
解决方案
你需要按索引对齐所有列表的对应元素,依次拼接即可。需要注意普通Dictionary<TKey,TValue>默认不保证插入顺序,如果你需要严格按Code→Name→Age的顺序拼接,建议先显式指定取值顺序避免异常。
实现代码(循环方案,兼容性最好)
public class Program { static void Main(string[] args) { Dictionary<string, List<object>> keyvalues = new Dictionary<string, List<object>>(); keyvalues.Add("Code", new List<object>() { 1, 2, 3, 4 }); keyvalues.Add("Name", new List<object>() { "A", "B", "C", "D" }); keyvalues.Add("Age", new List<object>() { 20, 30, 40, 50 }); // 取所有列表的公共长度 int length = keyvalues.Values.First().Count; for (int i = 0; i < length; i++) { // 按索引取每个列表的对应元素拼接成一行 string line = string.Concat(keyvalues.Values.Select(list => list[i])); Console.WriteLine(line); } Console.ReadLine(); } }
实现代码(LINQ Zip方案,适合固定数量列表)
public class Program { static void Main(string[] args) { Dictionary<string, List<object>> keyvalues = new Dictionary<string, List<object>>(); keyvalues.Add("Code", new List<object>() { 1, 2, 3, 4 }); keyvalues.Add("Name", new List<object>() { "A", "B", "C", "D" }); keyvalues.Add("Age", new List<object>() { 20, 30, 40, 50 }); // 显式按顺序取出列表,避免字典无序问题 var codeList = keyvalues["Code"]; var nameList = keyvalues["Name"]; var ageList = keyvalues["Age"]; var result = codeList .Zip(nameList, (c, n) => $"{c}{n}") .Zip(ageList, (pre, a) => $"{pre}{a}") .ToList(); result.ForEach(Console.WriteLine); Console.ReadLine(); } }
两种方案运行后都会输出你期望的结果:
1A20 2B30 3C40 4D50
注意事项
- 如果你使用的是低于.NET Core 2.0的版本,
Dictionary不保留插入顺序,拼接前必须显式指定列表的取值顺序,否则可能出现顺序错乱。 - 实际使用时建议提前校验所有列表长度一致,避免出现索引越界异常。
内容的提问来源于stack exchange,提问作者jishan siddique
相关产品推荐
相关产品推荐

