c#删除哈希表中所有值为1的键值对 代码

c#删除哈希表中所有值为1的键值对 代码,第1张

基本思路是先获取哈希表中所有值为1的键名,然后用这些键名引用相应元素,并移除这些元素。

//生成Hash表。

Hashtable hashtable = new Hashtable()

hashtable.Add("name", "Tome")

hashtable.Add("age", 18)

hashtable.Add("sex", "男")

hashtable.Add("补考次数", 1)

hashtable.Add("重修次数", 1)

//找到所有值为1的键名。

string[] keys = hashtable.Keys.Cast<string>().Where(x => hashtable[x].Equals(1)).ToArray()

//移除相应键名对应的元素。

foreach (string key in keys)

hashtable.Remove(key)

//显示Hash表当前所有元素。

foreach (DictionaryEntry entry in hashtable)

Console.WriteLine(entry.Key + "\t" + entry.Value)

Console.ReadKey()

运行结果:

小知识:

HashTable类(哈希表):每个元素都是一个存储在 DictionaryEntry

对象中的键/值对。键不能为 nullNothingnullptrnull 引用(在 Visual Basic 中为 Nothing),但值可以。

在哈希表中,根据指定键名获取或设置相应值的运算复杂度为 O(1),判断指定键名是否存在的运算复杂度也是 O(1)。

public class TestThread {

public static void main(String[] args){

Map<Integer, Object>tables = new Hashtable<Integer, Object>()

Thread add = new Thread(new ThreadAdd(tables))

Thread del = new Thread(new ThreadDel(tables))

Thread count = new Thread(new ThreadCount(tables))

//启动线程

add.start()

del.start()

count.start()

}

/**

*添加对象线程

*/

private static class ThreadAdd implements Runnable{

private Map<Integer, Object>table

public ThreadAdd(Map<Integer, Object>tables){

this.table=tables

}

public void run() {

// TODO Auto-generated method stub

for(int i=0i<10i++){

table.put(i, new Object())

System.out.println("添加对象,序号为:"+i)

}

}

}

/**

*删除对象线程

*/

private static class ThreadDel implements Runnable{

private Map<Integer, Object>table

public ThreadDel(Map<Integer, Object>table){

this.table=table

}

public void run() {

// TODO Auto-generated method stub

for(int i=0i<10i++){

try {

Thread.sleep(100)

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace()

}

table.remove(i)

System.out.println("移除对象,序号为:"+i)

}

}

}

/**

*统计线程

*/

private static class ThreadCount implements Runnable{

private Map<Integer, Object>table

public ThreadCount(Map<Integer, Object>table){

this.table=table

}

public void run() {

// TODO Auto-generated method stub

for(int i=0i<10i++){

try {

Thread.sleep(50)

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace()

}

System.out.println("当前队列还剩"+table.size()+"个对象")

}

}

}

}

这是我的写的demo,不知道符合不符合你的意思,大家共同交流共同进步。

Hashtable的定义和方法

1、 Hashtable构造函数

HashTable的优点就在于其索引的方式,速度非常快。

Hashtable常用的两种构造函数:public Hashtable() public Hashtable(int capacity)

2、向Hashtable添加元素

向Hashtable添加元素时,可以采用系统提供的Add方法。其语法格式如:public virtual void Add(Object key,Object value)

下面举个详细点的例子如:

Hashtable hashtable = new Hashtable() //实例化Hashtable对象

hashtable.Add("id", "600719")//向Hashtable哈希表中添加元素

hashtable.Add("name", "denylau")

hashtable.Add("sex", "男")

Console.WriteLine(hashtable.Count) //获得Hashtable哈希表中的元素个数

3、删除Hashtable中的元素

·Clear方法:该方法用来移除Hashtable中的所有元素,其语法格式如:public virtual void Clear()

·Remove方法:该方法用来从Hashtable中移除带有指定键的元素,其语法格式如下:public virtual void Remove(Object value)

4、Hashtable的遍历

遍历其实与数组类似,但是Hashtable中的元素是一个键值对的集合,因此需要使用DictionaryEntry类型来遍历,

例如:

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()

参考资料: http://www.studyofnet.com/news/76.html

希望以上的回答能够帮到你!


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/55228.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-02-26
下一篇2023-02-26

发表评论

登录后才能评论

评论列表(0条)

    保存