如何修改c hashtable 修改中指定键的值

2010年11月 总版技术专家分月排行榜第二2010年9月 总版技术专家分月排行榜第二2010年8月 总版技术专家分月排行榜第二
2010年7月 总版技术专家分月排行榜第三
2010年11月 总版技术专家分月排行榜第二2010年9月 总版技术专家分月排行榜第二2010年8月 总版技术专家分月排行榜第二
2010年7月 总版技术专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。您的位置: >
C#中hashtable 的使用方法
学习标签:
本文导读:在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key/value的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中key/value键值对均为object类型,所以Hashtable可以支持任何类型的key/value键值对.
哈希表Hashtable是一个重要的集合类型,下面对他的基本用法做个小小的总结。
一、名词介绍
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
二、HashTable 表的优点
HashTable是System.Collections命名空间提供的一个容器,HashTable中的key/value均为object类型,所以HashTable可以支持任何类型的key/value键/值对。
HashTable的优点就在于其索引的方式,速度非常快。
Hashtable常用的两种构造函数:public Hashtable() public Hashtable(int capacity)
三、向Hashtable添加元素
向Hashtable添加元素时,可以采用系统提供的Add方法。其语法格式如:public virtual void Add(Object key,Object value)
下面举个详细点的例子如:
C# 代码 &&复制
Hashtable hashtable = new Hashtable();
//实例化Hashtable对象
hashtable.Add(&id&, &600719&);
//向Hashtable哈希表中添加元素
hashtable.Add(&name&, &denylau&);
hashtable.Add(&sex&, &男&);
Console.WriteLine(hashtable.Count);
//获得Hashtable哈希表中的元素个数
四、删除Hashtable中的元素
1、Clear方法:该方法用来移除Hashtable中的所有元素,其语法格式如:public virtual void Clear()
C# 代码 &&复制
Hashtable hashtable = new Hashtable();
//实例化Hashtable对象
hashtable.Add(&id&, &600719&);
//向Hashtable哈希表中添加元素
hashtable.Add(&name&, &denylau&);
hashtable.Add(&sex&, &男&);
hashtable.Clear();
//移除Hashtable哈希表中的元素
Console.WriteLine(hashtable.Count);
2、Remove方法:该方法用来从Hashtable中移除带有指定键的元素,其语法格式如下:public virtual void Remove(Object value)
C# 代码 &&复制
Hashtable hashtable = new Hashtable();
//实例化Hashtable对象
hashtable.Add(&id&, &600719&);
//向Hashtable哈希表中添加元素
hashtable.Add(&name&, &denylau&);
hashtable.Add(&sex&, &男&);
hashtable.Remove(&sex&);
//移除Hashtable哈希表中的指定元素
Console.WriteLine(hashtable.Count);
五、Hashtable的遍历
遍历其实与数组类似,但是Hashtable中的元素是一个键值对的集合,因此需要使用DictionaryEntry类型来遍历,下面通过一个例子来说明下吧!
C# 代码 &&复制
Hashtable hashtable = new Hashtable();
//实例化Hashtable对象
hashtable.Add(&id&, &600719&);
//向Hashtable哈希表中添加元素
hashtable.Add(&name&, &denylau&);
hashtable.Add(&sex&, &男&);
Console.WriteLine(&\\t 键\\t 值&);
//遍历Hashtable哈希表中的元素并输出其键值对
foreach (DictionaryEntry dicEntry in hashtable)
Console.WriteLine(&\\t & + dicEntry.Key + &\\t & + dicEntry.Value);
Console.WriteLine();
六、Hashtable提供的其它方法介绍
1、Contains方法:该方法用来确定Hashtable中是否包含特定键,其语法格式如:public virtual bool Contains(Object key)
C# 代码 &&复制
Hashtable hashtable = new Hashtable();
//实例化Hashtable对象
hashtable.Add(&id&, &600719&);
//向Hashtable哈希表中添加元素
hashtable.Add(&name&, &denylau&);
hashtable.Add(&sex&, &男&);
Console.WriteLine(hashtable.Contains(&id&));
//判断Hashtable哈希表中是否包含指定的键
2、ContainsValue方法:该方法用来确定Hashtable中是否包含特定值,其语法格式如:public virtual bool ContainsVlaue(Object value)
C# 代码 &&复制
Hashtable hashtable = new Hashtable();
//实例化Hashtable对象
hashtable.Add(&id&, &600719&);
//向Hashtable哈希表中添加元素
hashtable.Add(&name&, &denylau&);
hashtable.Add(&sex&, &男&);
Console.WriteLine(hashtable.ContainsValue(&id&)); //判断Hashtable哈希表中是否包含指定的键值
您可能感兴趣
一月好评排行榜【转载】C#中如何操作HashTable类呢?
转载出处:&a href=".cn/s/blog_a20cdaf001012zkq.html"&.cn/s/blog_a20cdaf001012zkq.html&/a&
本文将给你答案,哈希表(Hashtable)简述在.NET
Framework中:
1.Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key/value的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。
2.Hashtable中keyvalue键值对均为object类型,所以Hashtable可以支持任何类型的keyvalue键值对.
3.哈希表的简单操作:
(1)在哈希表中添加一个keyvalue键值对:HashtableObject.Add(key,value);
(2)在哈希表中去除某个keyvalue键值对:HashtableObject.Remove(key);
(3)从哈希表中移除所有元素:&&&&&&&&&&&&HashtableObject.Clear();&
(4)判断哈希表是否包含特定键key:&&&&&&&HashtableObject.Contains(key);
下面控制台程序将包含以上所有操作:
using System.C file使用Hashtable时,必须引入这个命名空间
class hashtable
static void Main()
&&&Hashtable
ht=new Hashtable(); file创建一个Hashtable实例
&&&ht.Add(E,e);添加keyvalue键值对
&&&ht.Add(A,a);
&&&ht.Add(C,c);
&&&ht.Add(B,b);&&&string
s=(string)ht[A];
&&&if(ht.Contains(E))
file判断哈希表是否包含特定键,其返回值为true或false
&&&&&Console.WriteLine(the
E keyexist);
&&&ht.Remove(C);移除一个keyvalue键值对
&&&Console.WriteLine(ht[A]);此处输出a
&&&ht.Clear();移除所有元素
&&&Console.WriteLine(ht[A]);
file此处将不会有任何输出
4.遍历哈希表遍历哈希表需要用到DictionaryEntry
Object,代码如下:
for(DictionaryEntry de in ht) ht为一个Hashtable实例
&&&&Console.WriteLine(de.Key);de.Key对应于keyvalue键值对key
&&&&Console.WriteLine(de.Value);de.Key对应于keyvalue键值对value
5.对哈希表进行排序对哈希表进行排序在这里的定义是对keyvalue键值对中的key按一定规则重新排列,但是实际上这个定义是不能实现的,因为我们无法直接在Hashtable进行对key进行重新排列,如果需要Hashtable提供某种规则的输出,可以采用一种变通的做法:
ArrayList akeys=new ArrayList(ht.Keys); file别忘了导入System.Collections
akeys.Sort(); file按字母顺序进行排序
for(string skey in akeys)
&&&&Console.Write(skey
&&&&Console.WriteLine(ht[skey]);排序后输出
--------------(以下部分待整理)-------------------------  一。介绍
&&&表示键/值对的集合,这些键/值对根据键的哈希代码进行组织。
&&&提供快速的查询。元素的存储与顺序无关。不能在指定位置插入元素,因为它本身没有有效的排序。感觉它的优点体现在查询上。
&&&hashtable的键必须是唯一的,没有有效的排序,它进行的是内在的排序
public class Hashtable : IDictionary, ICollection,
IEnumerable,
&&&ISerializable,
IDeserializationCallback, ICloneable
  每个元素是一个存储在&DictionaryEntry&对象中的键/值对。键不能为空引用(Visual
Basic&中为&Nothing),但值可以。
  注:所谓的DictionaryEntry&结构,就是定义可设置或检索的字典键值对,有一个Key属性,一个Value属性,分别代表键和值
  二。添加
Hashtable.Add&方法
public virtual void Add(
将带有指定键和值的元素添加到&Hashtable&中。
key&要添加的元素的键。
value&要添加的元素的值。该值可以为空引用(Visual
Basic&中为&Nothing)。
  通过设置&Hashtable&中不存在的键的值,Item&属性也可用于添加新元素。例如:myCollection["myNonexistentKey"]
= myValue。但是,如果指定的键已经存在于&Hashtable&中,设置&Item&属性将改写旧值。相比之下,Add&方法不修改现有元素。
Hashtable hTable = new Hashtable();
hTable.Add("1","a");
hTable.Add("2","b");
hTable.Add("3","c");
hTable.Add("4","d");
hTable.Add("5","e");
//hTable.Add("1","aaaaaaaaaaa"); //出错,因为已经有键“1”
hTable["1"] = "aaaaaaaaaaa"; //ok
DropDownList2.DataSource = hT
DropDownList2.DataTextField = "Key";
DropDownList2.DataValueField = "Value";
DropDownList2.DataBind();
  二。删除
virtual void Remove(
从&Hashtable&中移除带有指定键的元素。
如果&Hashtable&不包含带有指定键的元素,则&Hashtable&保持不变。不引发异常。
virtual void Clear();
从&Hashtable&中移除所有元素。
Count&设置为零。容量保持不变。
virtual ICollection Values {}
获取包含&Hashtable&中的值的&ICollection。
注:ICollection&接口,定义所有集合的大小、枚举数和同步方法。
Hashtable hTable = new Hashtable();
hTable.Add("1","a");
hTable.Add("2","b");
hTable.Add("3","c");
hTable.Add("4","d");
hTable.Add("5","e");
Label2.Text = "";
foreach (string strKey in hTable.Keys) //遍历
Label2.Text += strK
Label2.Text += ",";
virtual ICollection Keys {}
获取包含&Hashtable&中的键的&ICollection。
返回的&ICollection&不是静态副本;相反,ICollection&反向引用原始&Hashtable&中的键。
因此,对&Hashtable&的更改继续反映到&ICollection&中。
virtual bool Contains(
确定&Hashtable&是否包含特定键。
virtual bool ContainsKey(
确定&Hashtable&是否包含特定键。与Contains同
virtual bool ContainsValue(
确定&Hashtable&是否包含特定值
virtual int Count {}
获取包含在&Hashtable&中的键值对的数目
C#集合系列~Hashtable用法
//哈希表,名-值对。类似于字典(比数组更强大)。哈希表是经过优化的,访问下标的对象先散列过。
//如果以任意类型键值访问其中元素会快于其他集合。GetHashCode()方法返回一个int型数据,
//使用这个键的值生成该int型数据。哈希表获取这个值最后返回一个索引,表示带有给定散列的数
//据项在字典中存储的位置。
Framework中,Hashtable是System.Collections命名空间
//提供的一个容器,用于处理和表现类似keyvalue的键值对,其中key通常可用来快速查找,同时key
//是区分大小写;value用于存储对应于key的值。Hashtable中keyvalue键值对均为object类型,
//所以Hashtable可以支持任何类型的keyvalue键值对.
//1.使用hashtable前.需要添加System.Collections的引用
//2.添加元素
Hashtable ht =new Hashtable();
ht.Add(key,value);// key,value可以是任何类型
//如果key有重复会掷出运行时异常,你可以这样处理
if(ht.Contains(key)==false)
{ht.Add(key,value);//&不存在则添加}
//也可以这样处理,效率要高些
&&&&ht.Add(key,value);
{&&&&//&不处理重复异常}&
//3.删除元素&
ht.Remove(key);
//4.删除所有&
ht.Clear();
//5.判断键是否已经存在
ht.Contains(key) //&这个刚才已经用过了
//6.遍历键&
foreach(Object key in ht.Keys)
//7.遍历值
foreach(Object value in ht.Values)
//8.同时遍历键值对&
foreach(DictionaryEntry de in ht)
&&&&&&&&Console.WriteLine(de.Key);//&取得键
&&&&&&&&Console.WriteLine(de.Value);//&取得值
//9.排序输出(对值也是一样处理)
ArrayList akeys = new ArrayList(ht.Keys);
akeys.Sort();
// Creates and initializes a new Hashtable.
Hashtable myHT = new Hashtable();
myHT.Add("one", "The");
myHT.Add("two", "quick");
myHT.Add("three", "brown");
myHT.Add("four", "fox");
// Displays the Hashtable.
Console.WriteLine("The Hashtable contains the
following:");
PrintKeysAndValues(myHT);
&&&&&&&&&public
static void PrintKeysAndValues(Hashtable myHT)
&&&&&&&&&&&&foreach
(string s in myHT.Keys)
&&&&&&&&&&&&&&&&Console.WriteLine(s);
&&&&&&&&&&&&Console.WriteLine("
-KEY- -VALUE-");
&&&&&&&&&&&&foreach
(DictionaryEntry de in myHT)
&&&&&&&&&&&&&&&&Console.WriteLine("
{0}: {1}", de.Key, de.Value);
&&&&&&&&&&&&Console.WriteLine();
static Hashtable parmCache = Hashtable.Synchronized(new
Hashtable());(方式一)
private static Hashtable parmCache = new
Hashtable();(方式二)
&如果没有任何线程在读取Hashtable,则Synchronized支持使用多个写入线程。
如果使用一个或多个读取器以及一个或多个编写器,则同步包装不提供线程安全的访问。
基本上就是为了应付高并发访问
private static Hashtable parmCache = Hashtable.Synchronized(new
Hashtable());
读音:[syn·chro·nize
]&&/siNGkrənīz/
Synchronized vs
我们知道,在.net的一些集合类型中,譬如Hashtable和ArrayList,都有Synchronized静态方法和SyncRoot实例方法,他们之间有联系吗?我怎么才能用好他们呢?
1.Synchronized表示返回一个线程安全的Hashtable,什么样的
hashtable才是一个线程安全的呢?
Synchronized方法返回的其实是一个SynchHashtable类型的实例。在前边我们说过,Synchronized表示返回一个线程安全的Hashtable,从这个解释不难看出,SynchHashtable应该是继承自Hashtable。SyncHashtable之所有能实现线程的安全操作,就是因为在他们的一些方法中,就加了lock,我们知道,哪一个线程执行了lock操作,在他还没有释放lock之前,其他线程都要处于堵塞状态。
SyncHashtable就是通过这种方法,来实现所谓的线程安全。
2.现在我们理解了Synchronized的含义和用法,那接下来我们看看他和SyncRoot之间的关系。
SyncRoot表示获取可用于同步 Hashtable 访问的对象,Hashtable
通过Synchronized方法,生成一个SynchHashtable类型的对象,在这个对象的一个方法中,通过lock
(this._table.SyncRoot)这样的代码来实现线程安全的操作,其中this._table.SyncRoot返回的就是一个
object类型的对象,在一个SynchHashtable对象实例中,不管我们调用多少次,他是唯一的。
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。2007年12月 .NET技术大版内专家分月排行榜第一
2007年10月 .NET技术大版内专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。C# HashTable 使用用法详解 - 推酷
C# HashTable 使用用法详解
C#中如何操作HashTable类呢?本文将给你答案,哈希表(Hashtable)简述在.NET Framework中,
一,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似keyvalue的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中keyvalue键值对均为object类型,所以Hashtable可以支持任何类型的keyvalue键值对.
二,哈希表的简单操作在哈希表中添加一个keyvalue键值对:HashtableObject.Add(key,value);
在哈希表中去除某个keyvalue键值对:HashtableObject.Remove(key);
从哈希表中移除所有元素:&&&&&&&&&&& HashtableObject.Clear();
判断哈希表是否包含特定键key:&&&&&& HashtableObject.Contains(key);
下面控制台程序将包含以上所有操作:
using System.C file使用Hashtable时,必须引入这个命名空间
class hashtable
public static void Main()
Hashtable ht=new Hashtable(); file创建一个Hashtable实例
ht.Add(E,e);添加keyvalue键值对
ht.Add(A,a);
ht.Add(C,c);
ht.Add(B,b);&& string s=(string)ht[A];
if(ht.Contains(E)) file判断哈希表是否包含特定键,其返回值为true或false
Console.WriteLine(the E keyexist);
ht.Remove(C);移除一个keyvalue键值对
Console.WriteLine(ht[A]);此处输出a
ht.Clear();移除所有元素
Console.WriteLine(ht[A]); file此处将不会有任何输出
三,遍历哈希表遍历哈希表需要用到DictionaryEntry Object,代码如下:
for(DictionaryEntry de in ht) fileht为一个Hashtable实例
Console.WriteLine(de.Key);de.Key对应于keyvalue键值对key
Console.WriteLine(de.Value);de.Key对应于keyvalue键值对value
四,对哈希表进行排序对哈希表进行排序在这里的定义是对keyvalue键值对中的key按一定规则重新排列,但是实际上这个定义是不能实现的,因为我们无法直接在Hashtable进行对key进行重新排列,如果需要Hashtable提供某种规则的输出,可以采用一种变通的做法:
ArrayList akeys=new ArrayList(ht.Keys); file别忘了导入System.Collections
akeys.Sort(); file按字母顺序进行排序
for(string skey in akeys)
Console.Write(skey + );
Console.WriteLine(ht[skey]);排序后输出
表示键/值对的集合,这些键/值对 根据键的哈希代码进行组织。
提供快速的查询。元素的存储与顺序无关。不能在指定位置插入元素,因为它本身没有有效的排序。感觉它的优点体现在查询上。
hashtable的键必须是唯一的,没有有效的排序,它进行的是内在的排序
public class Hashtable : IDictionary, ICollection, IEnumerable,
ISerializable, IDeserializationCallback, ICloneable
每个元素是一个存储在 DictionaryEntry 对象中的键/值对。键不能为空引用(Visual Basic 中为 Nothing),但值可以。
注:所谓的DictionaryEntry 结构,就是定义可设置或检索的字典键值对,有一个Key属性,一个Value属性,分别代表键和值
Hashtable.Add 方法
public virtual void Add(
object key,
object value
将带有指定键和值的元素添加到 Hashtable 中。
key 要添加的元素的键。
value 要添加的元素的值。该值可以为空引用(Visual Basic 中为 Nothing)。
通过设置 Hashtable 中不存在的键的值,Item 属性也可用于添加新元素。例如:myCollection[&myNonexistentKey&] = myValue。但是,如果指定的键已经存在于 Hashtable 中,设置 Item 属性将改写旧值。相比之下,Add 方法不修改现有元素。
Hashtable hTable = new Hashtable();
hTable.Add(&1&,&a&);
hTable.Add(&2&,&b&);
hTable.Add(&3&,&c&);
hTable.Add(&4&,&d&);
hTable.Add(&5&,&e&);
//hTable.Add(&1&,&aaaaaaaaaaa&); //出错,因为已经有键“1”
hTable[&1&] = &aaaaaaaaaaa&; //ok
DropDownList2.DataSource = hT
DropDownList2.DataTextField = &Key&;
DropDownList2.DataValueField = &Value&;
DropDownList2.DataBind();
1。public virtual void Remove(
object key
从 Hashtable 中移除带有指定键的元素。
如果 Hashtable 不包含带有指定键的元素,则 Hashtable 保持不变。不引发异常。
2。public virtual void Clear();
从 Hashtable 中移除所有元素。
Count 设置为零。容量保持不变。
1。public virtual ICollection Values {}
获取包含 Hashtable 中的值的 ICollection。
注:ICollection 接口,定义所有集合的大小、枚举数和同步方法。
Hashtable hTable = new Hashtable();
hTable.Add(&1&,&a&);
hTable.Add(&2&,&b&);
hTable.Add(&3&,&c&);
hTable.Add(&4&,&d&);
hTable.Add(&5&,&e&);
Label2.Text = &&;
foreach (string strKey in hTable.Keys) //遍历
Label2.Text += strK
Label2.Text += &,&;
2。public virtual ICollection Keys {}
获取包含 Hashtable 中的键的 ICollection。
返回的 ICollection 不是静态副本;相反,ICollection 反向引用原始 Hashtable 中的键。
因此,对 Hashtable 的更改继续反映到 ICollection 中。
3。public virtual bool Contains(
object key
确定 Hashtable 是否包含特定键。
4。public virtual bool ContainsKey(
object key
确定 Hashtable 是否包含特定键。与Contains同
5。public virtual bool ContainsValue(
object value
确定 Hashtable 是否包含特定值
6。public virtual int Count {}
获取包含在 Hashtable 中的键值对的数目
C#集合系列~Hashtable用法
//哈希表,名-值对。类似于字典(比数组更强大)。哈希表是经过优化的,访问下标的对象先散列过。
//如果以任意类型键值访问其中元素会快于其他集合。GetHashCode()方法返回一个int型数据,
//使用这个键的值生成该int型数据。哈希表获取这个值最后返回一个索引,表示带有给定散列的数
//据项在字典中存储的位置。 在.NET Framework中,Hashtable是System.Collections命名空间
//提供的一个容器,用于处理和表现类似keyvalue的键值对,其中key通常可用来快速查找,同时key
//是区分大小写;value用于存储对应于key的值。Hashtable中keyvalue键值对均为object类型,
//所以Hashtable可以支持任何类型的keyvalue键值对.
//1.使用hashtable前.需要添加System.Collections的引用
//2.添加元素
Hashtable ht =new Hashtable();
ht.Add(key,value);// key,value可以是任何类型
//如果key有重复会掷出运行时异常,你可以这样处理
if(ht.Contains(key)==false)
{ht.Add(key,value);// 不存在则添加}
//也可以这样处理,效率要高些
ht.Add(key,value);
{&&& // 不处理重复异常}
//3.删除元素
ht.Remove(key);
//4.删除所有
ht.Clear();
//5.判断键是否已经存在
ht.Contains(key) // 这个刚才已经用过了
//6.遍历键
foreach(Object key in ht.Keys)
//7.遍历值
foreach(Object value in ht.Values)
//8.同时遍历键值对
foreach(DictionaryEntry de in ht)
Console.WriteLine(de.Key);// 取得键
Console.WriteLine(de.Value);// 取得值
//9.排序输出(对值也是一样处理)
ArrayList akeys = new ArrayList(ht.Keys);
akeys.Sort();
// Creates and initializes a new Hashtable.
Hashtable myHT = new Hashtable();
myHT.Add(&one&, &The&);
myHT.Add(&two&, &quick&);
myHT.Add(&three&, &brown&);
myHT.Add(&four&, &fox&);
// Displays the Hashtable.
Console.WriteLine(&The Hashtable contains the following:&);
PrintKeysAndValues(myHT);
public static void PrintKeysAndValues(Hashtable myHT)
foreach (string s in myHT.Keys)
Console.WriteLine(s);
Console.WriteLine(& -KEY- -VALUE-&);
foreach (DictionaryEntry de in myHT)
Console.WriteLine(& {0}: {1}&, de.Key, de.Value);
Console.WriteLine();
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致

我要回帖

更多关于 修改指定机器码 的文章

 

随机推荐