【问题标题】:how do I count the number of equal values in a dictionary c#如何计算字典c#中相等值的数量
【发布时间】:2015-09-29 17:57:44
【问题描述】:

我正在尝试做的是将内置于字典中的测试数据集与也内置于字典中的学习数据集进行比较。我尝试了多种方法,要么在所有检查中得到 0,要么得到不可能的答案(我认为它对所有 int 测试集都计数),而不是看起来应该做的事情,哪个(所以我一直在思考)在训练集中的每个键/值对之后重置计数。

这是执行此操作的代码示例。帮忙?

 public static void theTestingAlgorithm()
    {
        foreach (var testrecipe in Testing.sortedTestingData)
        {
            Dictionary<string, int> runningNumbers = new Dictionary<string, int>();
            foreach(var learningRecipe in MakeData.SortedData)
            {
                runningNumbers.Add(learningRecipe.Key, 0);
            }                
            foreach(var testIngredient in testrecipe.Value)
            {
                foreach(var learningRecipe in MakeData.SortedData)
                {
                    if (learningRecipe.Value.Contains<string>(testIngredient))
                    {
                        runningNumbers[learningRecipe.Key]++;
                    }
                }
            }       
            string answer = evaluatetest(runningNumbers);
            runningNumbers.Clear();
            Answers.Add(testrecipe.Key, answer);
        }
    }

【问题讨论】:

  • 比较两组是什么意思?您想要不在两个集合中的值,或者在集合 A 但不在集合 B 中的值,反之亦然?你能解释一下(用例子)这两个集合的输入数据和预期的输出吗?
  • 我想要做的是计算一个测试食谱中有多少项目也存在于一个学习食谱中。然后注意到这一点,然后继续下一个学习秘诀。针对每个 learningRecipe 评估每个 testrecipe。例如:测试食谱有(在列表中)“奶酪”“土豆”“鸡蛋”学习食谱一有“鸡蛋”“苹果”“白面粉”学习食谱二有“香草”“香蕉”“米饭”“牛奶”预期的输出将是字典 ,

标签: c# dictionary compare


【解决方案1】:

您似乎正试图弄清楚一种成分在您的所有测试食谱中出现了多少次。我认为您不想在 foreach 中创建 runningNumbers

这是一个 linq 表达式,可以让您更接近您正在寻找的内容......

        Dictionary<string, string[]> SortedTestingData = new Dictionary<string, string[]>();
        SortedTestingData.Add("1", new string[] { "a", "b", "c" });
        SortedTestingData.Add("2", new string[] { "d", "b", "e" });
        SortedTestingData.Add("3", new string[] { "d", "b", "f" });
        SortedTestingData.Add("4", new string[] { "a", "b", "c" });

        var runningNumbers = from vals in SortedTestingData
                             from val in vals.Value
                             group val by val into g
                             select new
                             {
                                 Value = g.Key,
                                 Count = g.Count()
                             };

这是值中每个字符串每次出现的计数列表。

【讨论】:

  • 在我看到您在问题中的评论之前发布,将修复答案
  • 事实证明,我在上面构建的效果很好,问题出在我的排序设置中。我解决了这个问题,现在它完全按照我的想法工作了!感谢您的帮助!话虽如此,我想使用 linq 设置,因为它看起来更好。如果有人知道如何做到这一点,我将不胜感激在这里分享。谢谢!
猜你喜欢
  • 1970-01-01
  • 2019-04-24
  • 1970-01-01
  • 2019-02-01
  • 1970-01-01
  • 2010-10-12
  • 1970-01-01
  • 2014-06-26
  • 1970-01-01
相关资源
最近更新 更多