删除所有与IDictionary中的条件匹配的项目

男生

我正在尝试删除IDictionary对象中与条件匹配的所有元素。

例如,IDictionary包含一组键和相应的值(假设有80个对象)。键是字符串,值可以是不同的类型(请考虑使用DirectShow从wtv文件中提取元数据)。

一些键包含文本“ thumb”,例如thumbsize,startthumbdate等。我想从IDictionary中删除所有包含键thumb的对象。

我在这里看到的唯一方法是使用.Remove方法手动指定每个键名称。

是否有某种方法可以使键的所有对象包含thumb并将它们从IDictionary对象中删除。

代码如下:

IDictionary sourceAttrs = editor.GetAttributes();

GetAttributes定义为:

public abstract IDictionary GetAttributes();

我没有对GetAttributes的控制,它返回一个IDictionary对象,我只能在调试时通过查看它来了解内容。(可能是HashTable)

更新:最后的答案感谢蒂姆:

sourceAttrs = sourceAttrs.Keys.Cast<string>()
                 .Where(key => key.IndexOf("thumb", StringComparison.CurrentCultureIgnoreCase) == -1)
                 .ToDictionary(key => key, key => sourceAttrs[key]);
蒂姆·施密特

因此,您要删除键包含一个子字符串的所有条目。

您可以通过保留所有包含它的方式来使用LINQ

dict = dict
  .Where(kv => !kv.Key.Contains("thumb"))
  .ToDictionary(kv => kv.Key, kv => kv.Value);

如果要进行不区分大小写的比较,可以使用IndexOf

dict = dict
  .Where(kv => kv.Key.IndexOf("thumb", StringComparison.CurrentCultureIgnoreCase) == -1)
  .ToDictionary(kv => kv.Key, kv => kv.Value);

根据您的非常规编辑进行更新

如果它是像a这样的非通用字典HashTable,则不能直接使用LINQ,但是如果知道键是a string,则可以使用以下查询:

// sample IDictionary with an old Hashtable
System.Collections.IDictionary sourceAttrs = new System.Collections.Hashtable
{ 
    {"athumB", "foo1"},
    {"other", "foo2"}
};

Dictionary<string, object> newGenericDict = sourceAttrs.Keys.Cast<string>()
    .Where(key => !key.Contains("thumb"))
    .ToDictionary(key => key, key => sourceAttrs[key]);

但是实际上它可能是通用的Dictionary,您可以尝试与as运算符进行转换:

var dict = sourceAttrs as Dictionary<string, object>;

如果强制转换无效,则为null。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

angular 2从formarray中删除所有项目

来自分类Dev

从不在*所有*位置的列表中删除项目

来自分类Dev

如何从列表中删除所有项目?

来自分类Dev

获取值满足条件的字典中的所有项目

来自分类Dev

删除所有匹配的键

来自分类Dev

从RecyclerView删除所有项目

来自分类Dev

如何从Kotlin中的ArrayList中删除所有项目

来自分类Dev

选择与在dplyr中随机选择的条件匹配的所有行

来自分类Dev

Javascript过滤方法,删除数组中所有具有匹配值的项目

来自分类Dev

返回与pandas中的条件匹配的所有列的名称

来自分类Dev

从MemoryCache删除所有项目

来自分类Dev

如果条件匹配,则所有行中的标题名称

来自分类Dev

从队列中删除所有项目

来自分类Dev

从数组中删除所有匹配的元素

来自分类Dev

显示所有使用PHP在XML中匹配的项目

来自分类Dev

删除并返回数组中的所有项目

来自分类Dev

sed从行中删除所有开始的模式匹配

来自分类Dev

删除所有项目按钮

来自分类Dev

在elasticsearch中,我试图删除所有完全匹配的项目,但它不起作用

来自分类Dev

从字符串中删除所有匹配的字符

来自分类Dev

删除所有子目录中的匹配文件

来自分类Dev

如何删除双向链接列表中与某个值匹配的所有项目?

来自分类Dev

获取与时间序列中的条件匹配的所有值的列表

来自分类Dev

如何使用linq删除与条件匹配的所有列表行?

来自分类Dev

for 循环,并非所有满足条件的项目都被删除

来自分类Dev

宏删除所有项目

来自分类Dev

按条件替换php数组中的所有项目

来自分类Dev

MongoDB 从子子数组中删除所有匹配项

来自分类Dev

在 Python 中删除具有相同域的所有项目

Related 相关文章

热门标签

归档