2015-07-13 2 views
0

У меня есть словарь Интс:Лучший способ разделить элементы в словаре на сумму столбцов C#

 Dictionary<string, int[]> ret = new Dictionary<string, int[]>(); 
     int[] a = {1,2,3,4,5}; 
     int[] b = { 3, 6, 9, 10, 12 }; 
     int[] c = {2,3,3,5,6}; 
     ret.Add("abc", a); 
     ret.Add("def", b); 
     ret.Add("ghi", c); 

Что такое лучший способ суммировать значения в каждом из столбцов, а затем разделить на Всего? Например, первое значение будет 1/{1 + 3 + 2}

Вот что я пытался, но я думаю, что это подводит по строкам, а и он не работает из-за ошибки преобразования типа

public static Dictionary<string, double[]> freq(Dictionary<string, int[]> rawct) 
    { 

     Dictionary<string, double[]> scores = new Dictionary<string, double[]>(); 


     foreach (KeyValuePair<string, int[]> kvp in rawct) 
     { 
      double[] percent = Array.ConvertAll(kvp.Value, x => (double)x); 
      var total = (double)kvp.Value.Sum(); 

      var result = percent.Select(d => d/total); 


      scores.Add(kvp.Key, kvp.value); 
     } 

     return scores; 
    } 

ответ

1

Если вы хотите разделить на столбцы, я думаю, что вы можете сделать это (assumming все массивы имеют одинаковый размер, в этом примере, 5 itens):

Dictionary<string, double[]> scores = ret.ToDictionary(r=> r.Key, 
         r => r.Value.Select((v, index)=> 
         (double)v/ret.Values.Sum(values=> values[index]) // this is sum the columns 
         ).ToArray()); 

Выход:

abc 
    0,166666666666667 
    0,181818181818182 
    0,2 
    0,210526315789474 
    0,217391304347826 
def 
    0,5 
    0,545454545454545 
    0,6 
    0,526315789473684 
    0,521739130434783 
ghi 
    0,333333333333333 
    0,272727272727273 
    0,2 
    0,263157894736842 
    0,260869565217391 
+0

Если я хочу сохранить это в словаре, я просто сделаю 'Словарь results = score'? – ccsv

+0

действительно тип - Словарь , i отредактирован для объяснения экспликации – George

+0

есть ошибка в преобразовании типа в 'ret.ToDictionary' – ccsv

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