Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
2 / 2 / 0
Регистрация: 26.09.2019
Сообщений: 29
1

Работа с Dictionary

15.10.2019, 16:13. Показов 2527. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Камрады, не могу справиться с синтаксисом написания кода.
Головой понимаю как надо, а написать не могу.

Есть Dictionary с названиями string алкоголя и его double количеством.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
   public Dictionary<string, double> StockBar = new Dictionary<string , double>()
        {
            {"Absinte", 100.0 },
            {"Teqila", 100.0 },
            {"Rum" , 100.0 },
            {"Jin", 100.0 },
            {"Triple", 100.0 },
            {"Vodka", 100.0 },
            {"Kahlua", 100.0 },
            {"LemonFresh", 100.0 },
            {"Menthe", 100.0 },
            {"Juice", 100.0 },
        };
        public void ShowStock()
        {
            foreach (KeyValuePair<string, double> pair in StockBar)
            {
                Console.WriteLine($"{pair.Key}  {pair.Value}");
               
            }
        }
    }
Так же есть рецепты Коктейля

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
    class Recipe:Stock
    {
        public void LongIsland()
        {
            double Rum = 0.02;
            double Vodka = 0.02;
            double Teqila = 0.02;
            double Triple = 0.02;
            double Jin = 0.02;
            double LemonFresh = 0.02;
            double Juice = 0.2;
        }
    }
как написать код, чтоб количество алкоголя из рецепта, отнималось от Dictionary и перезаписывалось?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.10.2019, 16:13
Ответы с готовыми решениями:

Работа с Dictionary
Всем здравствуйте! В программе использую словарь с вложенным словарем. Выглядит это вот так:...

Работа с Dictionary
Есть следующий словарь. var dict = new Dictionary&lt;string, Dictionary&lt;string, int&gt;&gt;(); который...

Работа с Dictionary. Получение ключа по индексу
У меня есть 2 массива Dictionary&lt;int, double&gt; dict1 и dict2 Нужно сделать чт-то следующее. Не знаю...

Проинициализировать значениями dictionary вложенный в dictionary
Народ, помогите, как проинициализировать значениями такую конструкцию: Dictionary...

4
19 / 13 / 6
Регистрация: 29.08.2015
Сообщений: 115
15.10.2019, 16:29 2
1.
Цитата Сообщение от Kosharaa Посмотреть сообщение
Так же есть рецепты Коктейля
В этом коде что-то не так. Как минимум то, что переменные, которые по 0.02, задаются локально в конструкторе, и далее уже не видны. Объяви их до конструктора, а в конструкторе просто задавай значения, то есть без double перед ними.

2. Зачем наследование от Stock? Что такое Stock? Если это класс выше, то код в Recipe мог бы быть примерно таким:
C#
1
2
3
4
5
6
7
8
9
10
 class Recipe:Stock
    {
        public void LongIsland()
        {
            StockBar["Rum"] = 0.02;
            StockBar["Vodka"] = 0.02;
            // ...
            StockBar["Juice"] = 0.2;
        }
    }
И тогда в Stock осталось добавить примерно такой код:
C#
1
2
3
4
5
6
7
8
public static Stock operator -(Stock c1, Stock c2)
    {
        foreach(string alc in c2.StockBar.Keys)
        {
            c1.StockBar[alc] -= c2.StockBar[alc];
        }
        return c1;
    }

(я не проверял, но примерно так)
0
Эксперт .NET
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
15.10.2019, 16:30 3
Лучший ответ Сообщение было отмечено Kosharaa как решение

Решение

Наверное, ингредиенты должны быть представлены перечислением:
C#
1
2
3
4
5
6
7
8
9
10
public enum Ingredient
{
   Rum,
   Vodka,
   Teqila,
   Triple,
   Jin,
   LemonFresh,
   Juice,
}
Рецепт — списком ингредиентов и их количеством (можн отдельным типом со своим словарем):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public struct IngredientQuantity
{
   public Ingredient Ingredient { get; }
   public double Quantity { get; }
 
   public IngredientQuantity(Ingredient ingredient, double quantity)
   {
      Ingredient = ingredient;
      Quantity = quantity;
   }
}
 
var recipe = new List<IngredientQuantity>
{
   new IngredientQuantity(Ingredient.Rum, 0.02),
   new IngredientQuantity(Ingredient.Vodka, 0.02),
   new IngredientQuantity(Ingredient.Teqila, 0.02),
   new IngredientQuantity(Ingredient.Triple, 0.02),
   new IngredientQuantity(Ingredient.Jin, 0.02),
   new IngredientQuantity(Ingredient.LemonFresh, 0.02),
   new IngredientQuantity(Ingredient.Juice, 0.02),
}
Запасы — словарем, где ключ — ингредиент, а значение — количество:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
   public Dictionary<string, double> StockBar = new Dictionary<string , double>()
        {
            [Ingredient.Absinte] = 100.0,
            [Ingredient.Teqila] = 100.0,
            [Ingredient.Rum] = 100.0,
            [Ingredient.Jin] = 100.0,
            [Ingredient.Triple] = 00.0,
            [Ingredient.Vodka] = 100.0,
            [Ingredient.Kahlua] = 100.0,
            [Ingredient.LemonFresh] = 100.0,
            [Ingredient.Menthe] = 100.0,
            [Ingredient.Juice] = 100.0,
        };
Ну и процесс приготовления:
C#
1
2
3
4
5
6
7
8
9
10
11
12
void ShakenNotStirred(List<IngredientQuantity> recipe)
{
   foreach (var entry in recipe)
   {
      if (!StockBar.TryGetValue(recipe.Ingredient, out var remaining))
         throw new InvalidOperationException($"Unknown '{recipe.Ingredient}' ingredient");
      else if (remainig < recipe.Quantity)
         throw new InvalidOperationException($"Not enough {recipe.Ingredient}. Required {recipe.Quantity}, available {remaining}");
 
      StockBar[recipe.Ingredient] -= recipe.Quantity;
   }
}
1
2 / 2 / 0
Регистрация: 26.09.2019
Сообщений: 29
15.10.2019, 18:29  [ТС] 4
Так, в принципе все ясно кроме момента
Цитата Сообщение от Jluc Посмотреть сообщение
И тогда в Stock осталось добавить примерно такой код:
Зачем его добавлять в Stock, если мне надо что они после выбора пользователем рецепта (он будет не один), от Stocka отнималось кол-во рецепта и сохранялись данные.


Кажись я чет не до понял, вот полный код (подправленный):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class Stock
    {
 
        public Dictionary<string, double> StockBar = new Dictionary<string , double>()
        {
            {"Absinte", 100.0 },
            {"Teqila", 100.0 },
            {"Rum" , 100.0 },
            {"Jin", 100.0 },
            {"Triple", 100.0 },
            {"Vodka", 100.0 },
            {"Kahlua", 100.0 },
            {"LemonFresh", 100.0 },
            {"Menthe", 100.0 },
            {"Juice", 100.0 },
        };
        public void ShowStock()
        {
            foreach (KeyValuePair<string, double> pair in StockBar)
            {
                Console.WriteLine($"{pair.Key}  {pair.Value}");
               
            }
        }
    }
    class Recipe:Stock
    {
        public void LongIsland()
        {
            StockBar["Rum"] = 0.02;
            StockBar["Vodkda"] = 0.02;
            StockBar["Teqila"] = 0.02;
            StockBar["Triple"] = 0.02;
            StockBar["Jin"] = 0.02;
            StockBar["LemonFresh"] = 0.02;
            StockBar["Juice"] = 0.2;
            
        }
    }
0
19 / 13 / 6
Регистрация: 29.08.2015
Сообщений: 115
15.10.2019, 22:40 5
Цитата Сообщение от Kosharaa Посмотреть сообщение
Зачем его добавлять в Stock, если мне надо что они после выбора пользователем рецепта (он будет не один), от Stocka отнималось кол-во рецепта и сохранялись данные.
Потому что тогда можно будет сделать как-то так:
C#
1
2
3
var stock = new Stock(); 
var rec = new Recipe();
stock -= rec;
Мне подумалось, что отнимать так будет удобно
1
15.10.2019, 22:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.10.2019, 22:40
Помогаю со студенческими работами здесь

Работа со словарём в цикле Dictionary<int, List<string>>
Hi! Есть словарик. private static Dictionary&lt;int, List&lt;string&gt;&gt; test = new Dictionary&lt;int,...

Работа с XML файлами. Выдает ошибку в словаре Dictionary
Вот ошибка, Отсутствует аргумент, соответствующий требуемому формальному параметру &quot;value&quot; из...

Как достать dictionary из dictionary?
Подскажите пожалуйста как получить значение dictionary который находится внутри другого dictionary?...

Отбор из Dictionary вложенного в Dictionary
Здравствуйте, есть такой код: private Dictionary&lt;string, Dictionary&lt;int, string&gt;&gt; vt = new...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru