3 самых популярных преобразования из словаря в c#

#c#

#c#

Вопрос:

я пытаюсь понять, почему это не работает. у меня есть простое приложение — конвертер. есть 6 способов преобразовать некоторые единицы измерения, например, градусы Фаренгейта в градусы Цельсия, градусы Цельсия в градусы Фаренгейта. При нажатии «2» в главном меню приложение должно показать 3 самых популярных преобразования, но я вижу только 2.

 using System;
using System.Collections.Generic;
using System.IO;

namespace HelloWorld
{
    class PopularConversions
    {
        public static void ReadLogs()
        {
            var popularConversions = new Dictionary<string, int>();
            var conversions = new Dictionary<string, int>
            {
                { "Fahrenheit -> Celsjusz", 0 },
                { "Celsjusz -> Fahrenheit", 0 },
                { "Mila -> Kilometr", 0 },
                { "Kilometr -> Mila", 0 },
                { "Funt -> Kilogram", 0 },
                { "Kilogram -> Funt", 0 },
            };

            string[] lines = File.ReadAllLines("stats.txt");

            foreach (string line in lines)
            {
                string from = line.Split("|")[2];
                string to = line.Split("|")[3];

                if (from == "Funt" amp;amp; to == "Kilogram")
                    conversions["Funt -> Kilogram"]  ;
                else if (from == "Kilogram" amp;amp; to == "Funt")
                    conversions["Kilogram -> Funt"]  ;
                else if (from == "Mila" amp;amp; to == "Kilometr")
                    conversions["Mila -> Kilometr"]  ;
                else if (from == "Kilometr" amp;amp; to == "Mila")
                    conversions["Kilometr -> Mila"]  ;
                else if (from == "Fahrenheit" amp;amp; to == "Celsjusz")
                    conversions["Fahrenheit -> Celsjusz"]  ;
                else if (from == "Celsjusz" amp;amp; to == "Fahrenheit")
                    conversions["Celsjusz -> Fahrenheit"]  ;
            } 

            for (int i = 0; i < 3; i  )
            {
                string result = "Funt -> Kilogram";
                foreach (string key in conversions.Keys)
                {
                    if (!popularConversions.ContainsKey(key) amp;amp; conversions[result] < conversions[key])
                        result = key;
                }
                popularConversions.TryAdd(result, conversions[result]);
            }

            foreach (string key in popularConversions.Keys)
            {
                Console.WriteLine("n"   key   ": "   popularConversions[key]);
            }
        }
    }
}
 

Комментарии:

1. преобразования. Порядок убывания (x=>x.Значение). Возьмите(3)

Ответ №1:

Вам нужно включить файл в свой вопрос или лучше встроить его в свой код.

Ваш алгоритм не имеет смысла. Если «funt -> kilogram» является самым популярным преобразованием, вы в конечном итоге будете «пытаться» вводить его в popularConversions снова и снова, так что в итоге вы получите одну запись в своих popularConversions.

Что вам нужно сделать, это отсортировать записи о преобразованиях и выбрать 3 лучших. У меня нет времени на это, но что-то вроде:

 var convList = conversions.ToList();
convList.Sort((kvp1, kvp2) => { return kvp1.Value.CompareTo(kvp2.Value); });
convList.Take(3).ToList().ForEach(kvp => {
    Console.WriteLine("n"   kvp.Key   ": "   kvp.Value);
});