【问题标题】:Getting and index out of a dictionary<vector3,node>.values从字典中获取和索引<vector3,node>.values
【发布时间】:2016-05-11 17:16:51
【问题描述】:

在 Unity3d 中使用 C#。

我制作了一个字典,现在我想从该字典中返回一个值,而不是通过它的键,而是通过它的索引,我该怎么做?

return _nodeDictionary.Values[i];

那行给我这个错误:

错误 CS0021:无法将带有 [] 的索引应用于“System.Collections.Generic.Dictionary.ValueCollection”类型的表达式

【问题讨论】:

  • 你所说的“不是按它的键而是按它的索引”是什么意思?键是字典中的索引。
  • 啊,我明白了。猜猜猜猜我的问题。
  • 更正:正如@Sprunth 在他的回答中提到的那样,字典是无序的,因此您无法通过索引访问它。我的意思是,为了在字典中查找某些内容,您使用键来执行此操作,这就是您的索引。但是您不能像访问数组那样使用数字索引访问它。

标签: c# dictionary unity3d


【解决方案1】:

直接使用字典,不能通过索引访问,因为字典是无序的。

来自MSDN

出于枚举的目的,字典中的每个项目都被视为表示值及其键的 KeyValuePair 结构。返回项目的顺序未定义。

如果确实需要按索引访问,可以使用

return _nodeDictionary.Values.ToList()[i];

请注意,这会生成一个临时列表!你应该考虑改变你的数据结构,因为这违背了字典的目的。此外,由于列表具有未定义的顺序,索引 i 可能意味着任何东西。无论如何,您都必须搜索列表(或字典)。

【讨论】:

  • 好的,谢谢!这清除了它。我决定还创建一个与 dictionary.values 具有相同数据的普通数组,这样我可以在需要时引用它,每次将其转换为列表更便宜。
猜你喜欢
  • 2016-08-31
  • 2019-09-21
  • 1970-01-01
  • 2021-05-25
  • 2019-01-29
  • 1970-01-01
  • 1970-01-01
  • 2018-11-02
  • 1970-01-01
相关资源
最近更新 更多