如何匹配/搜索特定的字典键?

时间:2018-01-16 17:20:31

标签: c#

非常适合c#。

我正在使用API​​返回一个包含2个键和1个值的字典。

这是我目前的代码:

var dic = API.getVehicleValidMods((VehicleHash)sender.vehicle.model);
foreach (KeyValuePair<int, Dictionary<int, string>> kvp in dic)
{
    Dictionary<int, string> kvp2 = kvp.Value;
    foreach (KeyValuePair<int, string> kvp3 in kvp2)
    {
        API.consoleOutput("Key = {0}, Key = {1}, Value = {2}", kvp.Key, kvp3.Key, kvp3.Value);

以下是返回结果的示例:

Sample from the console

正如您所看到的,第一个键有时是相同的数字,有时它们会跳过数字。

我试图返回所有匹配的&#34;键号2&#34;匹配某个&#34;键1&#34;。 在我的情况下,字符串值并不重要,我只对int有兴趣。

所以,我的伪逻辑告诉我类似的东西 &#34; foren keynumber2 in keynumber1(整数,例如23)执行此操作:&#34; 应该工作,但我不确定如何正确编码。

tl; dr我如何找到所有&#34; key2&#34;匹配某个&#34; key1&#34; ?

3 个答案:

答案 0 :(得分:3)

因此,您希望找到特定外键的所有内键。您可以使用以下代码执行此操作:

var key1 = 42;
var allKeys = dic.ContainsKey(key1)
  ? dic[key1].Keys.ToArray() 
  : new int[0];

如果外部字典包含42作为键,则返回所有内部键。否则它将返回一个空的int数组。

答案 1 :(得分:0)

var matchesFrom1 = from val in dic where val.Key == 1 select val.Value;
var valueList = from val in matchesFrom1 where val.Key == 2 select val.Value;

valueList是返回值的字符串

答案 2 :(得分:0)

您可以使用LINQ方法:

使用.Where方法按键过滤您的KeyValuePairs<>初始集合。

使用SelectMany将结果IEnumerable<KeyValuePair<int, Dictionary<>>>展平为简单的IEnumerable<int>

使用Distinct确保没有重复的密钥(如果没有必要,则省略此部分)。

var someKey = 16;
var result = dic
            .Where(x => x.Key == someKey)
            .SelectMany(kv => kv.Value.Keys)
            .Distinct()
            .ToArray();