我有一个List<String>
,我需要将它转换为具有自动生成键的Dictionary<int,String>
,是否有更短的方法来完成?我已经尝试了:
var dictionary = new Dictionary<int, String>();
int index = 0;
list.ForEach(x=>{
definitions.Add(index, x);
index++;
});
但我认为这是不道德的做法。
我有一个List<String>
,我需要将它转换为具有自动生成键的Dictionary<int,String>
,是否有更短的方法来完成?我已经尝试了:
var dictionary = new Dictionary<int, String>();
int index = 0;
list.ForEach(x=>{
definitions.Add(index, x);
index++;
});
但我认为这是不道德的做法。
var dict = list.Select((s, i) => new { s, i }).ToDictionary(x => x.i, x => x.s);
我觉得这是最整洁的。
int index = 0;
var dictionary = myList.ToDictionary(item => index++);
我认为你所写的比LINQ更易读(并且作为额外优势,更加高效):
foreach(var item in list)
dictionary[index++] = item;
dictionary[index++] = item;
,存在一个隐藏的陷阱:现有的键将被静默覆盖!当使用Add
方法时,它会抛出一个异常,指示键已经存在,并在运行时以某种方式通知程序员。这总是取决于用例 ;) 通常情况下。 - Mong Zhudict[key1] = value1
时,如果 key1
已经存在,则该元素将被覆盖。如果不存在,则会创建一个新元素。这就是字典的正常工作方式,并且已经有文档进行了说明。在这种情况下,字典是一个新的空实例,因此没有现有的键。 - Eren Ersönmez使用:
var dict = list.Select((x, i) => new {x, i})
.ToDictionary(a => a.i, a => a.x);