Как проверить более одного значения из словаря в выражении if?

Я только начинаю изучать единство и видел эту задачу в одной из моих книг по изучению С#. Мне нужно создать код, используя оператор if внутри foreach, чтобы он проверял, могу ли я позволить себе каждый элемент в словаре, но я понятия не имею, как проверить их все или хотя бы один конкретный, поэтому я мог бы написать, если 3 раза Например.

На данный момент мой журнал показывает все предметы и их значения, но показывает, могу ли я позволить себе только первый. Что я должен поместить в скобки IF, чтобы проверить каждое значение после того, как оно появится в журнале?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LearningCurve : MonoBehaviour
{
    public int currentGold = 3;
    void Start()
    {
        Dictionary<string, int> itemInventory = new Dictionary<string, int>()
        {
            {"Potions", 4 },
            {"Daggers", 3 },
            {"Lockpicks", 1 }
        };

        foreach (KeyValuePair<string, int> itemCost in itemInventory)
        {
            Debug.LogFormat("Item {0} - {1}g", itemCost.Key, itemCost.Value);

            if (currentGold >= itemCost.Value)
            {
                Debug.Log("I can afford that!");
            }
        }
    }

Я действительно сбит с толку, потому что то, о чем вы просите («я понятия не имею, как проверить их все... Что я должен поместить в скобки ЕСЛИ, чтобы проверить каждое значение после того, как оно появится в журнале?») уже то, что вы разместили. foreach проходит через каждую пару в словаре. itemCost.Key — название предмета, а itemCost.Value — стоимость в золоте. В вашем заявлении if уже сверяется текущее золото со стоимостью предмета и отображается дополнительная строка журнала, если вы можете себе это позволить.

gunr2171 17.05.2022 00:29

Ваш текущий код проверяет, можете ли вы позволить себе каждый отдельный предмет в itemInventory. Вы имеете в виду, что хотите проверить, есть ли у вас 8 золота, необходимого для покупки все предметов в itemInventory?

Lance U. Matthews 17.05.2022 00:52
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
57
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

При тестировании фрагмента кода в консоли появилось два лога: «Я могу себе это позволить!». Благодаря этому я определил, что проблема заключается в реализации вашего фрагмента. Я предлагаю вам проверить, включили ли вы функцию «Свернуть» в консоли.

Я приложил ссылку Imgur для справки. Журнал консоли

Ответ принят как подходящий

Я не уверен, понял ли я вопрос, но я попытаюсь дать вам общий обзор того, что происходит в коде, который вы разместили. Давайте начнем с if, как работает блок if, просто вы помещаете boolean bool для краткости в C#, который может иметь два разных значения true и false, внутри if (BOOL VALUE), и если значение истинно, он запустит код между {CODE TO RUN}. Давайте немного рефакторим код, чтобы увидеть, что здесь происходит.

Dictionary<string, int> itemInventory = new Dictionary<string, int>()
    {
        {"Potions", 4 },
        {"Daggers", 3 },
        {"Lockpicks", 1 }
    };

    foreach (KeyValuePair<string, int> itemCost in itemInventory)
    {
        
        Debug.LogFormat("Item {0} - {1}g", itemCost.Key, itemCost.Value);
        bool iCanBuyitem = currentGold >= itemCost.Value;
        Debug.LogFormat("{0} >= {1} is {2}", currentGold, itemCost.Value,iCanBuyitem);
        if (iCanBuyitem)
        {
             Debug.LogFormat("I can buy {0} ", itemCost.Key);
        }else
        {
             Debug.LogFormat("I can't buy {0} ", itemCost.Key);
        }
    }

В отличие от математики в программировании символ >= не является символом равенства, а чем-то, называемым бинарным оператором, который принимает две переменные одного из многих числовых типов в С# в вашем словаре, они являются целыми числами Dictionary<string, int> и производят логическое значение, которое сообщает вам, если одно число больше или равно второму числу, это метод, который имеет что-то похожее на следующую подпись public bool FirstIsBiggerOrEqualToSecond(int first, int second) Вот скрипт dotnet, демонстрирующий вывод https://dotnetfiddle.net/oWlYlY

Да, это так, спасибо большое! Я использовал ваши примеры bool и if/else, и он работал так, как я хотел, извините, я так плохо описал свою проблему. Я понимаю большинство из того, что вы сказали, но я не понимаю, почему ваш код внутри оператора IF применяется ко всем трем позициям в словаре, а не только к первой, как это сделал мой код. Это оператор bool или «else», в чем разница и проверяется, если оператор после того, как каждая пара словаря отображается в журнале?

Gargatyk 17.05.2022 19:22

@Gargatyk Не беспокойтесь о вопросе, который важно изучить, я бы порекомендовал, прежде чем прыгать в Unity, пройти несколько базовых руководств по C#, чтобы понять основы программирования dotnet.microsoft.com/en-us/learn/csharp

Filip Cordas 17.05.2022 20:55

Прочитайте заголовок вопроса. Вы имеете в виду, что если вы хотите поместить два или более условий внутри IF, вы должны использовать &&оператор:

if (currentGold >= itemCost.Value && currentGold <= 15)
{
    Debug.Log("I have enough gold to buy this item and it's cheap.");
}

Другие вопросы по теме