WishfulCoder Ответов: 1

Как устранить дублирование пользовательского ввода в пределах границ anarray в C#?


Я делаю игру в Windows 2015 UWP C#, где пользователь вводит все слова, которые он может придумать, начиная с " Ac " в течение определенного времени, и переменная оценка увеличивается с каждым словом. У меня есть строковый массив в моем приложении C# UWP, содержащий все слова " Ac " в словаре. Игра работает отлично, единственное, что пользователь может вводить одно и то же слово столько раз, сколько захочет, и счет все равно будет увеличиваться. Есть ли какой-нибудь способ справиться с дублированием пользовательского ввода? Это мой код (исключая около 450+ слов в массиве, чтобы быть кратким и исключая DispatcherTimer):

private void btnEnter_Click(object sender, RoutedEventArgs e)
        {
            imgCorrectSign.Visibility = Visibility.Collapsed;
            imgX.Visibility = Visibility.Collapsed;
            string[] WordsWithAc = new string[] {"e","t","ed","es","he","hy","id"};

            txtUserInput.Text.Distinct();
            if (Array.IndexOf(WordsWithAc, txtUserInput.Text) > -1)
            {
                score += 10;
                txtScore.Text = score.ToString();
                imgCorrectSign.Visibility = Visibility.Visible;
            }
            else
            {
                imgX.Visibility = Visibility.Visible;
            }


словесная ошибка — Postimage.org[^]

Что я уже пробовал:

Было опробовано множество логических обходных путей, но это было что-то новое в работе с массивами в деталях.

[no name]

Ключ (ваш пользовательский ввод) в словарь может быть добавлен только один раз....

WishfulCoder

Не могли бы вы пояснить, что вы под этим подразумеваете? Спасибо.

[no name]

Что прояснить? Ключ в словаре может быть добавлен только один раз. Используйте словарь для хранения пользовательских данных.

1 Ответов

Рейтинг:
2

RickZeeland

Вы можете использовать Dictionary для этого см.: [^]
А также: коллекции-тип словаря C# с уникальными ключами и значениями - переполнение стека[^]


WishfulCoder

Спасибо, я попробую это сделать, надеюсь, что он будет работать с пользовательским вводом так же хорошо, как и массивы.

WishfulCoder

Пытался:

Dictionary< string, int> d = новый словарь & lt;string, int>();
d. добавить ("e", 1);
d. добавить ("t", 2);
d. добавить ("ed", 3);
d. добавить ("es", 4);
г) добавить ("он", 5);
d. добавить ("hy", 6);
d. добавить ("id", 7);

//d. Remove ("ничего"); / / ничего не удаляет.
если (ум.ContainsKey(txtUserInput.Текст))
{
GlobalClassAttention.totalRecallScore += 10;
txtScore.Текст = GlobalClassAttention.totalRecallScore.Метод toString();
imgCorrectSign.Видимость = Видимость.Видно;
d. удалить(txtUserInput. Text);
}
ещё
{
imgX.Видимость = Видимость.Видно;
}
}


Работает так же, как и массив, но все равно повторяет значение, которое вводит пользователь. Например, если я введу "t" дважды, он увеличит счет/примет ввод как правильный. Не следует ли d. Remove( txtUserInput. Text); удалить то, что пользователь только что ввел из массива, чтобы оно не повторялось?

RickZeeland

Словарь. Remove(ключ) должен работать, может быть, что-то еще не так ?
Вы каждый раз заново инициализируете словарь ? затем значение 't' будет добавлено снова.

WishfulCoder

Это все, что есть в этой части кода, я не буду повторно инициализировать словарь снова. Я попробовал удалить (ключ), но он ошибается, так как "ключ" - это не имя переменной. Я попытался сохранить массив, который у меня был выше, а затем добавить txtUserInput в словарь через "d. Add(userInput. Text)", а затем использовать этот словарь в качестве места для добавления всего, что вводит пользователь. Например, если пользователь должен был ввести одно и то же дважды, "if (d.ContainsKey(txtUserInput.Text))" должен проверить, находится ли этот пользовательский ввод в этом создаваемом словаре пользовательских вводов. Но я была неудачной в этом тоже.