通过字典迭代并做一些事情

时间:2014-11-02 11:07:26

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

是否可以像这样通过字典进行迭代?

  
      
  1. 我想计算所有字典项目(总和每个值),
  2.   
  3. 接下来,对于每个Key我想要他们的价值
  4.   
  5. 然后,我想将每个EACH键值除以和
  6.   
  7. 最后我想将每个输出乘以3
  8.   

我做了它所以它适用于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的字典中的每个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

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

@edit 谢谢你的回复,但检查我的编辑。我有一个字符串列表,让我们说

  

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

我的程序正在计算史密斯的数量,所以它会将x显示为两个。然后我想用所有单词的数量来分割史密斯(两个)的狙击数,所以它是2/8 = 0.25。然后我想用每个单词做这个并乘以它在这个例子中它将是2/8 * 1/8 * ... * 1/8。所以我想从循环(来自字典)乘以一个先前的数字,而不是固定数量,这就是造成这个问题的原因。

1 个答案:

答案 0 :(得分:2)

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));