2014-11-02 4 views
0

Можно ли итератору через словарь вот так?Итерация через словарь и выполнение некоторых вещей

  1. Я хочу, чтобы сосчитать все словарные элементы (сумма каждого значения),
  2. Далее, для каждого ключа я хочу взять их значение
  3. Тогда, я хочу, чтобы разделить каждый КАЖДЫЙ значение ключа с суммой
  4. И ласты Я хочу, чтобы умножить каждый выход из 3

Я сделал это так, он работает с 1 пункт, но не знаете, как сделать это так, я t работает с каждым элементом в словаре.

Вот пример кода для 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 для каждого ключа в словаре).

Я thiking о создании одной большой петли для этого, как:

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 Спасибо за ответы, но проверьте мои изменения. У меня есть список строк, скажу

«Смит очень крутой член Smith Company»

И моя программа подсчет числа Смита, поэтому он будет показывать й как два. Затем я хочу разделить снобизм кузнецов (два) на количество всех слов, так что это 2/8 = 0,25. Затем я хочу сделать это с каждым словом и умножить его так, чтобы в этом примере это было 2/8 * 1/8 * ... * 1/8. Я хочу, чтобы умножить на число из цикла (из словаря), а не на фиксированную сумму, вот что делает эту проблему.

+1

Вашего весь второй цикл эквивалентно 'dic.TryGetValue («Смит», из й);' – dasblinkenlight

ответ

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

Эй, проверить мой выбор :), потому что в вашем примере умножить на фиксированном значении не предыдущее значение цикла, извините, если я задал свой вопрос неправильно. –

+0

проверить мой обновленный answere @ Ken'ichiMatsuyama – dotctor

+0

Спасибо, смотря на это, он должен работать, но значение результата равно 0,0 (проверено в отладке), сумма в порядке, и это 8. Не знаю, как получить в текущий/элемент tho. –

Смежные вопросы