C# 检查具有相同键的多个词典是否具有相同的值
假设我有一系列字典。所有的字典都有完全相同的键。对于每个键,我想返回数组中字典的索引,如果该键的值与至少一个其他字典的值相同 例如,如果存在一个键a,并且ArrayOfDictionary[0][a]和ArrayOfDictionary[2][a]的计算结果都为7,那么我想将a[0,2]对添加到一个空字典中C# 检查具有相同键的多个词典是否具有相同的值,c#,C#,假设我有一系列字典。所有的字典都有完全相同的键。对于每个键,我想返回数组中字典的索引,如果该键的值与至少一个其他字典的值相同 例如,如果存在一个键a,并且ArrayOfDictionary[0][a]和ArrayOfDictionary[2][a]的计算结果都为7,那么我想将a[0,2]对添加到一个空字典中 我对如何实现这一点的逻辑感到非常困惑。如果您的字典数组名为src,那么对于每个键,您可以使用匹配值将所有字典分组,然后转换为位置列表。将结果转换为字典取决于您希望如何处理结果中的重复键 va
我对如何实现这一点的逻辑感到非常困惑。如果您的字典数组名为src,那么对于每个键,您可以使用匹配值将所有字典分组,然后转换为位置列表。将结果转换为字典取决于您希望如何处理结果中的重复键
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() })
);
如果我理解正确,你的逻辑可能是这样的。 FilterAddictionary将获得最终结果
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());
如果两个字典的a值为7,而两个不同的字典的a值为9,会发生什么?Hi@user3370908。到目前为止你试过什么?你的代码在哪里?与其说,不如说我有一组字典。所有的字典都有完全相同的键,如果您发布示例代码来初始化您所引用的字典,这将更有帮助。代码对示例数据的描述要比书面文字好得多。A将非常棒。如果这两个词典的区分大小写能力不同呢?还请说明数据的性质-如果这是XY问题-。