【问题标题】:Please help with a dictionary comprehension in LINQ, C#请帮助理解 LINQ、C# 中的字典理解
【发布时间】:2010-03-15 20:59:54
【问题描述】:

Python 相当于我想要的是:

>>> #C#: Dictionary<int, string> tempDict = ...
>>> tempDict = {i : str(i) for i in range(200000)}
>>> tempDict[5]
'5'
>>> 

例子有点简化,但我可以自己修改;不想用专有类的细节来打扰你。

知道了:

var y = (from x in Enumerable.Range(0, 20000) select Guid.NewGuid()).ToDictionary(g=>g, g=>new MyObj(g))

【问题讨论】:

  • 或许为不懂python的我们写下你想要的文字:)
  • 1:'1'、2:'2'等字典。不过,我原来的要求有点变了。我实际上需要创建一个 guid 的字典: object where ... 要创建一个对象,我必须有一个 guid。在正常循环中,我会使用临时变量。我不认为 lambdas 允许我做同样的事情。如果不是这样,请告诉我。谢谢!

标签: linq dictionary list-comprehension


【解决方案1】:
Enumerable.Range(0, 200000).ToDictionary(x => x, x => x.ToString())

也许?

【讨论】:

  • 谢谢。现在......如果我根本不想使用索引怎么办?键必须是 Guid guid = Guid.NewGuid(),而值是 ... 比如说 guid.ToString() 或 myFunc(guid) - 关键是 A) 系统给了我 Guid,B)该值取决于键(guid)。获取 guid 生成器然后将其输入到字典中是否有意义?我知道单行可能会变得丑陋,但我正在学习 LINQ 并且很好奇它是否可能。谢谢。
  • 我想我想要 Enumerable.Repeat( () => Guid.NewGuid(), 200000) 之类的东西,除了 Repeat 不采用 lambda 而是一个值。此外,我不想使用中间 ToList - 我想将内容保留为 IEnumerable,直到我需要生成实际的字典。
  • 嗯,听起来你最好编写一个生成 200k GUID 的枚举器。您可以在ToDictionary 调用中轻松执行myfunc(guid) 之类的操作。
猜你喜欢
  • 2012-07-18
  • 1970-01-01
  • 2011-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多