【问题标题】:Iterating through dictionary and doing some stuff遍历字典并做一些事情
【发布时间】:2014-12-29 04:28:39
【问题描述】:

可以像这样遍历字典吗?

  1. 我想统计所有字典项(对每个值求和),
  2. 接下来,对于我想要获取其值的每个键
  3. 然后,我想将每个键值除以 sum
  4. 最后,我想将 3 的每个输出相乘

我做了它,所以它适用于 1 个项目,但不确定如何制作它,以便它适用于字典中的每个项目。

这是 1 项的示例代码:

var dic = new Dictionary<string, int>();
//this is sum
double y = 0;
foreach (var item in dic)
{
     y += item.Value;
}
//this is selected item
double x = 0;
foreach (var item in dic)
{               
    if (item.Key == "Smith")
    {
        x = item.Value;
    }
}
double z = 0;
z = x / y;
Console.WriteLine("Smith/DicSum: " + z);

现在我想将 Z 相乘(每个 Z 对应字典中的每个键)。

我正在考虑为此制作一个大循环:

for (int i=0; i<y; i++) where y is the sum for all items in dictionary and multiply z's on the end of the loop

但我仍然不知道如何获取所有单独的值并将它们分开,而不是说出每个值的特定键。

@编辑 感谢您的回答,但请检查我的编辑。我有一个字符串列表,比如说

“史密斯是史密斯公司的非常酷的成员”

我的程序正在计算史密斯的数量,所以它会将 x 显示为 2。然后我想将 smiths 的数量(两个)除以所有单词的数量,所以它是 2/8 = 0,25。然后我想对每个单词执行此操作并将其相乘,以便在此示例中为 2/8*1/8*...*1/8。所以我想乘以循环(来自字典)中的重要数字,而不是固定数量,这就是造成这个问题的原因。

【问题讨论】:

  • 你的整个第二个循环相当于dic.TryGetValue("Smith", out x);

标签: c# .net loops dictionary key-value


【解决方案1】:
var words = "Smith is very cool member of Smith Company"
    .Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

var dic = new Dictionary<string, double>();

foreach (string word in words)
{
    if (dic.ContainsKey(word))
        dic[word]++;
    else
        dic[word] = 1;
}

var sum = dic.Sum(x => x.Value);
var result = dic.Values.Aggregate(1.0, (current, item) => current * (item / sum));

【讨论】:

  • 嘿,检查我的编辑 :) 因为在你的例子中,你乘以固定值而不是前一个循环值,对不起,如果我问错了我的问题。
  • 谢谢,看看这个,应该可以了,但是结果的值是0,0(在调试中检查),总和很好,是8。不知道如何进入当前/项目。
  • 我已经编辑了答案,我的错,初始值应该是1.0而不是0.0
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-17
  • 2012-05-08
  • 1970-01-01
  • 2020-04-06
  • 2016-10-28
  • 1970-01-01
相关资源
最近更新 更多