我在弄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或空字符串。这将使更改变得更容易。
答案 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