Как проверить более одного значения из словаря в выражении 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
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
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.");
}

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