使用简单的方法填充一个Dictionary<string,List<string>>

8

大家好,我的目标是创建一个列表字典,是否存在更简单的技术?

我更喜欢使用List(t)而不是IEnumerable(t),这就是为什么我选择了列表字典而不是Ilookup或IGrouping。

代码可以运行,但看起来有些凌乱。

string[] files = Directory.GetFiles (@"C:\test");

Dictionary<string,List<string>> DataX = new Dictionary<string,List<string>>();

foreach (var group in files.GroupBy (file => Path.GetExtension (file)))
{
   DataX.Add (group.Key, group.ToList());
}

这个问题不应该在 http://codereview.stackexchange.com/ 上吗? - servermanfail
2
我看不出有什么问题。为什么你觉得它很混乱 - Klaus Byskov Pedersen
@Klaus:我也认为他有点娇惯,但Linq实现看起来更加简洁。@Zion:你似乎有尝试F#的正确心态,这就是关于保持简洁的一切。 - gjvdkamp
1个回答

12

要全部使用 LINQ 完成,您可以使用 ToDictionary()

string[] files = Directory.GetFiles (@"C:\test");
var DataX = files.GroupBy (file => Path.GetExtension (file))
                 .ToDictionary(g => g.Key, g => g.ToList());

或者如 Klaus 在下面指出的那样,你可以一步完成这个操作:

var DataX = Directory.GetFiles (@"C:\test")
                 .GroupBy (file => Path.GetExtension (file))
                 .ToDictionary(g => g.Key, g => g.ToList());

+1,既然这样,为什么不顺便把“files”的声明也删除掉呢? - Klaus Byskov Pedersen
@Klaus 确实,谢谢 - 已编辑。我不太喜欢将所有内容压缩得太紧,因为这会使调试变得更加困难(并且可能会使其不易读),但我在这里看不到任何问题。 - Rup
@diceguyd30 嘿,抱歉。这种事情经常发生在我身上。 - Rup

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接