非常适合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);
以下是返回结果的示例:
正如您所看到的,第一个键有时是相同的数字,有时它们会跳过数字。
我试图返回所有匹配的&#34;键号2&#34;匹配某个&#34;键1&#34;。 在我的情况下,字符串值并不重要,我只对int有兴趣。
所以,我的伪逻辑告诉我类似的东西 &#34; foren keynumber2 in keynumber1(整数,例如23)执行此操作:&#34; 应该工作,但我不确定如何正确编码。
tl; dr我如何找到所有&#34; key2&#34;匹配某个&#34; key1&#34; ?
答案 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();