循环遍历多个字典

本文关键字:字典 遍历 循环 | 更新日期: 2023-09-27 18:16:40

我有6本字典。我想将另一个字典与它们中的每一个进行比较看看哪些字典包含哪些字符串。有可能用foreach循环吗?

static Dictionary<string, int> d = new Dictionary<string, int>();
static Dictionary<string, double> dNL = new Dictionary<string, double>();
static Dictionary<string, double> dDE = new Dictionary<string, double>();
static Dictionary<string, double> dFR = new Dictionary<string, double>();
static Dictionary<string, double> dSP = new Dictionary<string, double>();
static Dictionary<string, double> dEN = new Dictionary<string, double>();
static Dictionary<string, double> dIT = new Dictionary<string, double>();
foreach (var f in d)
{
    if (dNL.ContainsKey(f.Key))
    {
        //add to a numeric?
    }
    if (dDE.ContainsKey(f.Key))
    {
        //add to a numeric?
    }
}

像这样?

我目前拥有的(并且不像预期的那样工作):

// need to find a better solution
foreach (var f in d)
{
    if (dNL.ContainsKey(f.Key))
    {
        dNLtotaal++;
    }
}
foreach (var f in d)
{
    if (dDE.ContainsKey(f.Key))
    {
        dDEtotaal++;
    }
}
foreach (var f in d)
{
    if (dFR.ContainsKey(f.Key))
    {
        dFRtotaal++;
    }
}
foreach (var f in d)
{
    if (dSP.ContainsKey(f.Key))
    {
        dSPtotaal++;
    }
}
foreach (var f in d)
{
    if (dEN.ContainsKey(f.Key))
    {
        dENtotaal++;
    }
}
foreach (var f in d)
{
    if (dIT.ContainsKey(f.Key))
    {
        dITtotaal++;
    }
}
// NEED A MUCH BETTER SOLUTION
List<int> totaleD = new List<int>();
totaleD.Add(dNLtotaal);
totaleD.Add(dDEtotaal);
totaleD.Add(dFRtotaal);
totaleD.Add(dSPtotaal);
totaleD.Add(dENtotaal);
totaleD.Add(dITtotaal);
int max = !totaleD.Any() ? -1 : totaleD.Select((value, index) => new { Value = value, Index = index }).Aggregate((a, b) => (a.Value > b.Value) ? a : b).Index;
var maxIndex = totaleD.IndexOf(totaleD.Max());
Console.WriteLine(maxIndex);

循环遍历多个字典

你可以这样做:

var items = d.Keys;
var dictionaries = new[] { dNL, dDE, dFR, dSP, dEN, dIT };
var result = dictionaries.Select((d, index) =>
    new {
        Index = index,
        Matches = items.Count(i => d.ContainsKey(i))
    })
    .OrderByDescending(i => i.Matches)
    .Select(i => i.Index)
    .FirstOrDefault();

给出匹配项最多的字典的索引

您可以使用lambda表达式来获得所需的结果。在下面的例子中,我尝试使用两个字典:

int dNLtotaal = 0;
Dictionary<string, double> dNL = new Dictionary<string, double>();
Dictionary<string, double> dDE = new Dictionary<string, double>();
dNL.Keys.Where(k => dDE.ContainsKey(k)).ToList().ForEach(k => dNLtotaal++);

希望有所帮助

为什么不用1本字典而不是6本呢?并保留一对[string, List[SomeObject]]其中SomeObject是一个类,如

class SomeObject
{
    public Enum Type;//dNL, dDE etc
    public double Value;
}