我有一个列表字典,我想获得字典中每个列表的第一个元素的列表。基本上是:
Dictionary<string, List<object>> dico = new Dictionary<string, List<Object>>();
// fill data...
List<object> list = new List<Object>();
foreach(var value in dico.Values)
{
list.Add(value.ElementAt(0));
}
可以用LINQ完成吗。
非常感谢。
答案 0 :(得分:4)
Dictionary
实现IEnumerable<KeyValuePair>
,这样您就可以从每个值投影到您想要的值,然后转换为列表:
var list = dico.Select(p => p.Value[0]).ToList();
如果您关注空的List
或缺少(null
)列表,则可以保护投影:
var list = dico.Select(p => p.Value?.FirstOrDefault()).ToList();
PS我认为ElementAtOrDefault
是List
的方法,或者至少是List
的特殊方法,但事实并非如此。我想知道为什么.Net使用类型转换来检查List
,而不是在知道静态类型时的特殊情况:
public static T ElementAtOrDefault<T>(this List<T> src, int index) => src.Count > index ? src[index] : default(T);
快速测试表明,List
的扩展方法快20倍。