关于Dictionary元素的遍历

以前我面试别人的时候,我经常会问应聘者,如何在C#中遍历Hashtable中的元素,每次遍历时,需要得到Key和Value。

一直以来,也经常有人问这个问题。包括Java下Map的元素的遍历。我在水木清华的Java版也回答过这个问题。

.NET平台下:
IDictionary dictionary = new Hashtable();
foreach (DictionaryEntry entry in dictionary)
{
    Object key 
= entry.Key;
    Object val 
= entry.Value;
}

Java环境下:
Map map = new HashMap();
Iterator iter 
= map.entrySet().iterator();
while (iter.hasNext()) {
    Map.Entry entry 
= (Map.Entry) iter.next();
    Object key 
= entry.getKey();
    Object val 
= entry.getValue();
}

点评:
.NET环境下,引入了foreach的写法,但是IDictionary和ICollection的GetEnumerator()方法返回的类型是不一样的,这一点,很容易让人迷惑,初学者很多都会写错。如下是初学者常用的写法:
IDictionary dictionary = new Hashtable();
foreach (Object val in dictionary)
{
    
//
}
这是一个地雷,.NET的基础类库和C#在语言的设计(对foreach的支持方式)的相互作用下,产生了这一个地雷,也许也可以称之为缺陷……

Java下,使用起来的方式,有点麻烦,很多初学者,不使用恰当的方法遍历Map,甚至一些写了多年Java程序员都是用比较笨的办法。
Map map = new HashMap();
Iterator iter 
= map.keySet().iterator();
while (iter.hasNext()) {
    Object key 
= iter.next();
    Object val 
= map.get(key);
}
这种方式效率会比较低。

posted on   温少  阅读(13685)  评论(8编辑  收藏  举报

编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架

导航

< 2004年7月 >
27 28 29 30 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
1 2 3 4 5 6 7
点击右上角即可分享
微信分享提示