【问题标题】:Search in Dictionary Array C# [closed]在字典数组 C# 中搜索 [关闭]
【发布时间】:2020-10-28 18:56:37
【问题描述】:

我有一个字典数组,如下所示:

(Dictionary<string, object>[])

数组中的每个字典都包含两个键“name”和“val”以及它们的关联值。

如何搜索特定的“名称”,例如测试并返回“val”。

【问题讨论】:

  • 它是一个字典列表或数组,列表中的每个字典都包含两个键。我尝试了 selectmany,但它只是将集合展平为 ienumerable。
  • SelectMany 有什么问题?你的问题没有显示这个方法的用法
  • 你是怎么得到这个的?看起来它可能来自 JSON,但名称/值对是一致的,应该反序列化为类型化对象,而不是字典。然后您可以使用对象的属性搜索数组。无论哪种方式,您都尝试过什么?一个循环?林克?有什么事吗?
  • 使用的代码与此类似,答案如下:stackoverflow.com/questions/12399212/…。基本上我正在解析一个 TOML 文件并获取这个字典列表

标签: c# linq


【解决方案1】:

如果“名称”在所有字典中都是唯一的:

var val = dictionaries.SingleOrDefault(d=> d.ContainsKey("name")).?["name"];

如果“姓名”出现在多个字典中:

var vals = dictionaries.Where(d=> d.ContainsKey("name")).Select(d => d["name"]);

【讨论】:

  • 我使用了与您类似的解决方案: var vals = dictionaries.SingleOrDefault(d => d.Values.Contains("someValue"))["correspondingKey"];
  • d.Values.Contains 可能很慢;如果您要遍历其值集合以查找值,然后获取键,则它会破坏使用字典的大部分意义。你最好把你的字典翻过来,所以现在的值是关键,反之亦然
猜你喜欢
  • 2021-03-13
  • 2016-11-15
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 2014-12-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多