我有一个字典,我想转换为另一个字典,使用以下示例隐含的规则:
输入:
Dictionary<string, string> inputs = new Dictionary<string, string>(3)
{
{ "A", "First" },
{ "Z", "Third" },
{ "J", "Second" }
};
输出:
Dictionary<int, string> output = new Dictionary<string, string>(3)
{
{ 0, "First" },
{ 1, "Second" },
{ 2, "Third" }
};
我可以使用lambda语法&amp;没有中间对象?
感谢。
答案 0 :(得分:8)
字典的枚举顺序是不确定的(即项目没有索引),所以我不确定这是否可行。如何导出整数值?
编辑:
我现在明白了:
inputs
.OrderBy(input => input.Key)
.Select((input, index) => new {index, input.Value})
.ToDictionary(x => x.index, x => x.Value)
答案 1 :(得分:2)
如果您可以定义订单应该是什么,那么我会这样做(我选择按键订购):
Dictionary<string, string> inputs = new Dictionary<string, string>(3)
{
{ "A", "First" },
{ "Z", "Third" },
{ "J", "Second" }
};
var outputs = inputs.OrderBy(i=>i.Key).Select(i=>i.Value).ToArray();
// output
// String [] (3 items):
First
Second
Third
这会为您提供一个包含您要求的索引的数组(例如output[0]
)。
如果你真的想要回复字典条目,你可以像这样获得它们的相关数据(你不能只返回字典因为它们是无序的):
var outputs = inputs.OrderBy(i=>i.Key).Select(
(entry, index) => new KeyValuePair<int, string>(index, entry.Value));
如果需要,请在那里扔.ToArray()
。
如果你真的想要一本字典,请试试这个:
var outputs = inputs.OrderBy(i=>i.Key)
.Select((entry, i) => new { entry.Value, i })
.ToDictionary(pair=>pair.i, pair=>pair.Value).Dump();
请记住,词典本身并不是有序的,所以如果你对它进行枚举,你应该再添加一个.OrderBy
。