我有一个字典里面的值是以下面的格式存储的-
userID, empDetails
例如,
1234, 'empName,jobDesc,CardNumber,Type'
我得把这些信息和另一组信息进行比较-
- 如果输入的userId存在于上述字典中,则从字典中删除此记录。
- 如果输入的CardNumber存在于上述字典中(此处userId未知),则从字典中删除此记录。
第一个条件很简单,可以通过以下方式实现
dictionary.Remove(key)
但是我很困惑,我该如何实现第二个条件。
if(CardNumber.PresentinAboveDictionary)
then
Remove that record
我知道我们可以像这样比较key中的部分字符串,但是我想删除记录。Check if any part of a hashtable value contains certain string c#
5条答案
按热度按时间sdnqo3pr1#
假设字典中的雇佣详细信息是指定格式的字符串,则需要:
1.在字典中搜索值
1.解析/拆分值以获取卡号
1.检查卡号以查看它们是否与您正在检查的卡号匹配
1.出现匹配时返回键值对
1.在返回的键值对中删除键的条目
解决方案的示例代码:
检查卡号是否存在于雇用详细信息中的方法:
omqzjyyz2#
可以使用强类型
List
代替Dictionary
1.使用Linq内置
Remove
方法1.使用
Parallel.ForEach
,迭代列表并删除项目(注意,需要更多时间)伪代码:
vhipe2zx3#
你可以按照简单的方法通过使用一个循环来移除密钥。
这里我假设字典中没有值为-1的键。
elcex8rz4#
这可能是矫枉过正,并没有为重复阅读整个数据集进行优化,但它比公认的解决方案要快得多。我对下面的解决方案进行了测试,结果如下:
1.生成了1,000,000个具有唯一ID和卡号的数据行(如果卡号不唯一,该解决方案也可以工作)
1.按ID随机删除10万条数据,按卡号随机删除10万条数据
1.生成剩余数据项的列表
整个过程耗时约75秒。
然后我尝试使用接受的答案重复步骤1)和2)-大约10分钟后,删除数据项的速度大约为7%。因此,我认为下面的解决方案对于这种类型的操作大约快了2个数量级。
可能有更好的双链表实现,但我对它们都不太熟悉。
t3psigkw5#
你可以做这样的事情。