如何将不同大小的列表合并到带有Zip的字典中?

时间:2018-07-07 01:06:38

标签: c#

我在弄Zip,我对它的工作方式有些困惑。我无法以自己想要的方式获得它。我必须列出这样的列表:

List<string> names = new List<string> 
{ 
    "Mark", "Chris", "Alex", "Default Name", "Jerilyn"
};

List<string> colors = new List<string> 
{
    "Green", "Blue", "Red", "Orange"
};

当我在此处使用Zip时:

var dict = names.Zip(colors, (k, v) => new { Key = k, Value = v })
                 .ToDictionary(x => x.Key, x => x.Value);

我得到了Mark -> Green, Chris -> Blue, Alex -> Red, Default Name -> Orange的输出,但是我想为所有'Default Name'实例添加一个默认值,所以它将像这样:

Mark -> Green, Chris -> Blue, Alex -> Red, Default Name -> 'Default Color', Jerilyn -> Orange

但是,我不明白为什么Zip只添加Key的前4个元素。我知道值只有4个值,但是我希望所有五个值都在集合中,最后一个条目为null或空字符串。这将使更改变得更容易。

1 个答案:

答案 0 :(得分:0)

这是一个两步过程,因为您不知道"Default Name"是什么颜色。

方法如下:

var names = new List<string>
{
    "Mark", "Chris", "Alex", "Default Name", "Jerilyn"
};

var colors = new List<string>
{
    "Green", "Blue", "Red", "Orange"
};

var map = names.Zip(colors, (n, c) => new { n, c }).ToDictionary(x => x.n, x => x.c);

map = names.ToDictionary(x => x, x => map.ContainsKey(x) ? map[x] : map["Default Name"]);

给出:

Key          | Value  
------------ | -------
Mark         | Green  
Chris        | Blue   
Alex         | Red    
Default Name | Orange 
Jerilyn      | Orange