Професионална програма
Loading...
delian1914 avatar delian1914 98 Точки

Сортиране на стойности във вложен речник C#

Привет. Решавам задачка. Прецених да използвам вложен речник.

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

След всички манипулации по услвието съдържанието на речниците са с верните стойности. Проблемът е, че не успявам да сортирам в низходящ ред стойностите в най-крайната стойност double.

Пробвам

foreach (var word in dict)
            {
                foreach (var num in word.Value.OrderByDescending(x=>x.Value))
                {
                    Console.WriteLine($"{word.Key} -> {num.Key} times ({num.Value:f2}%)");
                }
            }

Проблемът е, че стойностите излизат в реда, в който са влезли и не се сортират както очаквам

hello -> 3 times (27.27%)
pesho -> 2 times (18.18%)
four -> 1 times (9.09%)
two -> 1 times (9.09%)
gosho -> 2 times (18.18%)
five -> 1 times (9.09%)
six -> 1 times (9.09%)

 

Желан изход

hello -> 3 times (27.27%)
pesho -> 2 times (18.18%)
gosho -> 2 times (18.18%)
four -> 1 times (9.09%)
two -> 1 times (9.09%)
five -> 1 times (9.09%)
six -> 1 times (9.09%)

 

Благодаря!

0
Programming Fundamentals 12/02/2018 22:17:15
ad2bg avatar ad2bg 123 Точки

Аз пък се насочих към Linq понеже харесвам едноредовите решения:

using System;
using System.Collections.Generic;
using System.Linq;

namespace _04._Array_Histogram
{
    class ArrayHistogram
    {
        static void Main(string[] args)
        {
            List<string> seqence = Console.ReadLine().Split().ToList();
            seqence
                .GroupBy(x => x)
                .Select(x => new { Value = x.Key, Count = x.Count() })
                .OrderByDescending(x=>x.Count)
                .ToList()
                .ForEach(x => Console.WriteLine($"{x.Value} -> {x.Count} times ({100.0 * x.Count/seqence.Count():f2}%)"));
        }
    }
}

1
why_where_what avatar why_where_what 116 Точки

Едноредовите решения не могат да се дебъгват. Понякога се намира грешката ако е някаква очевидна, но друг път е доста трудно да откриеш къде гърми. Така че за дребни задачки е ок, но за по-големи проекти винаги трябва да се описват нещата по-подробно и четливо. Нямам предвид да се пише излишен код, но да събираме 10 реда в 1 не е добра практика. 

2