C# 循环浏览多个词典

C# 循环浏览多个词典,c#,dictionary,foreach,C#,Dictionary,Foreach,我有6本字典。我想将其他字典与它们中的每一个进行比较,看看哪些字典包含哪些字符串。可以使用foreach循环吗 static Dictionary<string, int> d = new Dictionary<string, int>(); static Dictionary<string, double> dNL = new Dictionary<string, double>(); static Dictionary<string, d

我有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?
    }
}
静态字典d=新字典();
静态字典dNL=新字典();
静态字典dDE=新字典();
静态字典dFR=新字典();
静态字典dSP=新字典();
静态字典dEN=新字典();
静态字典dIT=新字典();
foreach(d中的变量f)
{
如果(dNL.CONTANSKEY(f.Key))
{
//添加到一个数字?
}
if(dDE.CONTANSKEY(f.Key))
{
//添加到一个数字?
}
}
像这样的

我目前拥有的(但工作方式与预期不同):

//需要找到更好的解决方案
foreach(d中的变量f)
{
如果(dNL.CONTANSKEY(f.Key))
{
DNLTOAL++;
}
}
foreach(d中的变量f)
{
if(dDE.CONTANSKEY(f.Key))
{
DDETOAL++;
}
}
foreach(d中的变量f)
{
if(dFR.CONTANSKEY(f.Key))
{
dfrtoal++;
}
}
foreach(d中的变量f)
{
中频(dSP.ContainsKey(f.Key))
{
dsptoal++;
}
}
foreach(d中的变量f)
{
如果(容器库(f键))
{
齿科++;
}
}
foreach(d中的变量f)
{
if(dIT.ContainsKey(f.Key))
{
dITtotaal++;
}
}
//需要更好的解决方案吗
列表总计=新列表();
总计。添加(Dnlotaal);
总计。添加(DDETOAAL);
总计。添加(DFRTOAL);
总计。添加(dSPtotaal);
总计。添加(齿数);
总计。添加(dITtotaal);
int max=!总计。有()吗-1:总计。选择((值,索引)=>new{value=value,index=index})。聚合((a,b)=>(a.value>b.value)?a:b)。索引;
var maxIndex=totaleD.IndexOf(totaleD.Max());
控制台写入线(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();

这将为您提供匹配项最多的词典索引

您可以执行以下操作:

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++);
int-dnltoal=0;
字典dNL=新字典();
字典dDE=新字典();
其中(k=>dDE.ContainsKey(k)).ToList().ForEach(k=>dnltoal++);

希望对您有所帮助

您可以使用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++);
int-dnltoal=0;
字典dNL=新字典();
字典dDE=新字典();
其中(k=>dDE.ContainsKey(k)).ToList().ForEach(k=>dnltoal++);

希望它有帮助

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

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

为什么不用一本而不是六本词典呢?并保留一对[string,List[SomeObject]],其中SomeObject是一个类似

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

你可以用lambda来缩短它,我现在不能给出一个例子,对不起,你能解释一下你的最后一行应该做什么吗?它是不是应该告诉你哪个字典匹配得最多?你的代码到底有多不符合预期?你可以将所有的
foreach
语句组合成一个只包含每个
if
语句的字典,你可以在
d
键上循环。@Rob yes,我正试图找到与它最匹配的词典,但我与一位朋友交谈,发现了这个问题的症结所在。我正在计算字典中有多少个键,但每个字典都有1个或0个包含该二元图的键。例如;他在每本字典中只出现1次,所以每一个int的值都是1。你可以用lambda来缩短它,我现在不能给出一个例子,对不起,你能解释一下你的最后一行应该做什么吗?它是不是应该告诉你哪个字典匹配得最多?你的代码到底有多不符合预期?你可以将所有的
foreach
语句组合成一个只包含每个
if
语句的字典,你可以在
d
键上循环。@Rob yes,我正试图找到与它最匹配的词典,但我与一位朋友交谈,发现了这个问题的症结所在。我正在计算字典中有多少个键,但每个字典都有1个或0个包含该二元图的键。例如;他在每本字典里只出现过一次,因此,每个int都有一个值1。不用
ToList
Foreach
你可以只使用
Count
并将结果分配给
dNLtotal
。不用
ToList
Foreach
你可以只使用
Count
并将结果分配给
dNLtotal
。我假设
items
应该是
d.Keys
@juharr是-对不起,我错过了
d
的声明,并假设它是一个
列表。感谢您的关注,我假设
项目
应该是
d.Keys
@juharr是-对不起,我错过了
d
的声明,并假设它是一个
列表。谢谢你的帮助