假设我有一系列词典。所有词典的键都完全相同。对于每个键,如果它们的键值与至少一个其他词典的键值相同,我想返回数组中的索引。
例如,如果有一个键“ a”,并且ArrayOfDictionaries[0]["a"]
和ArrayOfDictionaries[2]["a"]
的求和结果均为7,我想将一个对(“ a”, [0,2])。
我对如何实现这一目标的逻辑非常困惑。
答案 0 :(得分:0)
如果我正确理解您的逻辑,则可能看起来像这样。 filterDictionary将具有最终结果。
var resultDictionary = new Dictionary<string, List<int>>();
var filteredDictonary = new Dictionary<string, int[]>();
var arrayOfDictionaries = new Dictionary<string, int>[]
{
new Dictionary<string, int> { { "a", 7 },{ "b",5},{ "c", 10 } },
new Dictionary<string, int> { { "a", 8 },{ "b",6},{ "c", 10 } },
new Dictionary<string, int> { { "a", 7 },{ "b",7},{ "c", 10 } },
};
for (var j = 0; j < arrayOfDictionaries.Length; j++)
{
foreach (var i in arrayOfDictionaries[j])
{
var uniqueKey = i.Key + i.Value.ToString();
if (resultDictionary.ContainsKey(uniqueKey))
{
resultDictionary[uniqueKey].Add(j);
}
else
{
resultDictionary.Add(uniqueKey, new List<int> { j });
}
}
}
filteredDictonary = resultDictionary.Where(a => a.Value.Count() > 1).Select(a => a).ToDictionary(kv => kv.Key.Substring(0,1), kv => kv.Value.ToArray());
答案 1 :(得分:-1)
如果将字典数组命名为src
,则对于每个键,可以将所有字典与匹配值组合在一起,然后转换为位置列表。将结果转换为Dictionary
取决于您要如何处理结果重复键。
var ans2 = src[0].Keys.SelectMany(k => src.Select((d, i) => new { Key = k, Value = d[k], pos = i })
.GroupBy(kvp => kvp.Value)
.Select(kvpg => new { Key = kvpg.First().Key, Matches = kvpg.Select(kvp => kvp.pos).ToList() })
);