首页 > 解决方案 > 加入两个列表创建 KeyValuePair 列表

问题描述

我有一份清单List<KeyValuePair<string,string>>

var results = new List <KeyValuePair<string, string>>();

我还有两个字符串列表:

var position= new List<string>{ "first", "second", "third" };
 
var name = new List<string>{ "John", "Diana", "Matthew", "Lisa", "James"};

这两个列表的大小可以不同,只是添加一个空字符串。

我想将它们合并在一起以创建一个新的results. 我目前正在使用这个:

 results = position.Zip(name, (x, y) => new KeyValuePair<string, string>(x, y)).ToList(); 

如果只有两个列表的大小相同,这将起作用。但是,如果不是,它会修剪name列表以匹配position列表。所以并不是所有的价值观都在那里。

我需要实现以下

first,John
second,Diana
third, Matthew
     , Lisa
     , Jame

这两个列表在任何时候都可以是可变大小的,而不是固定的。所以有时name可以大于position,反之亦然。

我见过 wereSelectMany被使用,但不知道如何将它结合到我的Zip. 有什么想法或建议吗?

标签: c#

解决方案


我会增加名称列表的长度以匹配位置元素的数量,并根据需要添加空字符串。

position.Zip(name.Concat(Enumerable.Repeat(string.Empty, Math.Max(0, position.Count - name.Count))), (x, y) => ...

推荐阅读