A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 马炜亮 于 2013-5-18 00:05 编辑

Hashtable ht = new Hashtable();
            ht.Add ("东","上");
            ht.Add("西", "下");
            ht.Add("南", "左");
            ht.Add("北", "右");
            foreach (var item in ht.Keys )
            {
                Console.WriteLine("{0}-----------{1}",item ,ht[item ]);
            }
            Console.ReadKey();

运行后输出:
北-----------右
南-----------左
东-----------上
西-----------下


想问下:
1、item并没有声明也没赋值,那么一开始是怎么判断的。感觉item很突兀。。。
2、输出不是按照ht顺序输出,有什么原因么?

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

8 个回复

倒序浏览
1. 哈希表不是顺序表,输出不一定有序。
2. 对哈希表进行排序在这里的定义是对key/value键值对中的key按一定规则重新排列;
3. 但是实际上这个定义是不能实现的,因为无法直接在Hashtable进行对key进行重新排列.
回复 使用道具 举报
  1. Hashtable openWith = new Hashtable();
  2.             openWith.Add("txt", "notepad.exe");
  3.             openWith.Add("bmp", "paint.exe");
  4.             openWith.Add("dib", "paint.exe");
  5.             openWith.Add("rtf", "wordpad.exe");
  6.             foreach (var item in openWith.Keys)
  7.             {
  8.                 Console.WriteLine("{0}-{1}", item, openWith[item]);
  9.             }
  10.             Console.ReadKey();
复制代码
结果是:ref-wordpad.exe
            txt-notepad.exe
            dib-paint.exe
            bmp-paint.exe
也是同样的疑问。
回复 使用道具 举报
  var item 就是声明,item 就是个变量
回复 使用道具 举报
这个是foreach实现遍历需要继承一个IEnumable接口,就可以实现遍历,var是隐式转换,根据后面的内容对前面进行推断,大概就是这样的。

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

回复 使用道具 举报
许庭洲 发表于 2013-5-17 07:17
1. 哈希表不是顺序表,输出不一定有序。
2. 对哈希表进行排序在这里的定义是对key/value键值对中的key按一 ...

也就是在遍历输出的时候不是按照添加的先后顺序来的。理论上键的顺序是有规则的,但在hashtable这不能直接按规则对键进行排列对吧。。:)。第3条以我现在的知识面还不能完全懂,不过晓得这点学起来心理踏实了。。。哈哈,谢谢你了。
回复 使用道具 举报
郑丹丹1990 发表于 2013-5-17 07:38
结果是:ref-wordpad.exe
            txt-notepad.exe
            dib-paint.exe

item的问题我已经懂了 ,今天用了一天foreach。之前疑惑是因为用for的思维来想foreach。不知道你foreach怎么样哈。。:)
输出顺序的问题看了楼上晓得是怎么回事了,要想了解根本可能还得多学点东西哈。。
不过希望你的疑问已经没了昂~~~都加油哈:handshake
回复 使用道具 举报
斩_梦 发表于 2013-5-17 11:16
这个是foreach实现遍历需要继承一个IEnumable接口,就可以实现遍历,var是隐式转换,根据后面的内容对前面 ...

谢谢你,foreach我已经明白了。:)
回复 使用道具 举报
王朋 中级黑马 2013-5-19 12:07:05
9#
凡是能foreach循环的对象,必须是继承了一个IEnumable的借口,或者是实现了GetEnumable()的方法,这样就可以直接进行遍历了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马