如何通过索引从OrderedDictionary中获取项的键和值?如何通过索引从C#中的OrderedDictionary获取密钥?
18
A
回答
10
没有直接内置的方式做到这一点。这是因为一个OrderedDictionary
指数是的关键;如果你想要真正的钥匙,那么你需要自己追踪它。也许最简单的方法是将密钥复制到可转位集合:
// dict is OrderedDictionary
object[] keys = new object[dict.Keys.Count];
dict.Keys.CopyTo(keys, 0);
for(int i = 0; i < dict.Keys.Count; i++) {
Console.WriteLine(
"Index = {0}, Key = {1}, Value = {2}",
i,
keys[i],
dict[i]
);
}
您可以封装这种行为成包接入OrderedDictionary
一个新的类。
35
1
我创建了一些扩展方法,它们使用前面提到的代码通过索引和键值获取。
public static T GetKey<T>(this OrderedDictionary dictionary, int index)
{
if (dictionary == null)
{
return default(T);
}
try
{
return (T)dictionary.Cast<DictionaryEntry>().ElementAt(index).Key;
}
catch (Exception)
{
return default(T);
}
}
public static U GetValue<T, U>(this OrderedDictionary dictionary, T key)
{
if (dictionary == null)
{
return default(U);
}
try
{
return (U)dictionary.Cast<DictionaryEntry>().AsQueryable().Single(kvp => ((T)kvp.Key).Equals(key)).Value;
}
catch (Exception)
{
return default(U);
}
}
+0
如果你的目的是要恢复默认值,如果目标指数/关键不在词典中,你选择了一个昂贵的方式做到这一点。相对于像if/else这样的正常控制流构造,异常是非常昂贵的。最好是自己检查越界指数和不存在的密钥,而不是依赖发生的异常。 – Odrade 2015-07-02 21:15:15
相关问题
- 1. Java HashMap:如何通过索引获取密钥和值?
- 2. 如何通过索引访问密钥?
- 3. Java - 获取HashMap中的密钥索引?
- 4. 通过密钥获取Cookie?
- 5. PHP - 通过索引而不是密钥获取数组值
- 6. 如何通过一个密钥字段从Map中获取值?
- 7. 如何通过密钥从RouteTable.Routes集合中获取url?
- 8. 获取密钥的LinkedHashMap索引
- 9. 如何在PHP中获取密钥的索引号?
- 10. 如何通过c#中的索引获取堆栈项?
- 11. 如何从密钥中的公钥获取密码
- 12. 如何通过值进行搜索并获取多维数组中的密钥?
- 13. 如何通过SL api获取加密密钥?
- 14. 从OrderedDictionary获取名称值
- 15. 如何通过提供密钥名称来获取密钥的特定值?
- 16. 如何通过node.js中的密钥直接从数组中获取值
- 17. 通过Firebase获取密钥元素
- 18. 通过密钥获取GAE实体
- 19. Reducer通过sys.stdin获取多个密钥?
- 20. 从Multiindex中获取密钥?
- 21. 如何通过CryptoAPI中的证书公钥获取密钥容器的信息?
- 22. C#获取OrderedDictionary中对象索引的最佳方式是什么?
- 23. Openpyxl如何通过索引从工作表中获取行
- 24. 如何通过索引从字符串中获取char?
- 25. Java:从编码密钥获取密钥
- 26. 通过密钥从字典中获取单个值
- 27. 如何通过API密钥
- 28. 如何通过API密钥
- 29. 如何通过密钥获取mongo集合的孩子?
- 30. 是否可以通过前缀获取/搜索Memcached密钥?
我也一样,但再次看到: OrderedDictionary列表=的OrderItems; object strKey = list [e.OldIndex]; DictionaryEntry dicEntry = new DictionaryEntry(); foreach(DictionaryEntry DE in list) if(DE.Value == strKey) { dicEntry.Key = DE.Key; dicEntry.Value = DE.Value; }} – 2010-02-10 04:47:16
@RedSwan:在哪里指数? – testing 2014-09-12 10:10:03
该索引绝对*不是键 - 这些在OrderedDictionary中必然是不同的结构。 – Conrad 2015-02-26 19:14:23