Сравнение массивов С#

250
18 апреля 2022, 10:10

Есть текстовый документ, в котором записаны в столбик такое(пример): 11123 абрис ,11124 абсент ,11125 абсида ,11126 абсурд ,11131 абулия ,11132 абхаз . И таких строк очень много, почти 6000. Индексы их начинаются от 1000 до 6666. Я получаю все эти строки таким образом

string[] lines = File.ReadAllLines(@"F:\VS Projects\Со звёздочкой\diceware.txt");

Потом я формирую массив типа int, состоящий из 5 рандомных элементов от 1 до 6. Суть в том, что по этим рандомным числам я должен найти слово по этому индексу и вывести його. Вот как пытаюсь это сделать

int[] arr1 = new int[5]; //Массив с рандомными значениями, представим, что значения уже там есть.
for ( int i = 0; i < lines.Length; i++)
{
char[] textByCharacter = lines[i].ToCharArray(); //Строку перевожу в массив символов.
int yes = object1.Sravnenie(arr1, textByCharacter); //Метод, в котором я пытаюсь сравнить
if ( yes == 5)
{
textBox.Text = lines[i];
break;
}
}

Сам метод сравнения:

public int Sravnenie(int[] numbers, char[] ch)
        {
            int yes = 0;
            int[] transfer = new int[5];
            for (int i = 0; i < 5; i++) //Беру 5, так как первые 5 символом это индекс слова
            {
                transfer[i] = Convert.ToInt32(ch[i]);
            }
            for (int i = 0; i < 5; i++)
            {
                if (numbers[i] == transfer[i])
                {
                    yes++;
                }
            }
            return yes;
        }

Но в итоге, мне ничего не выводит. Как решить? Заранее спасибо!

Answer 1
int[] numbers = ... // к примеру это ваши 5 чисел
string[] lines = File.ReadAllLines(@"F:\VS Projects\Со звёздочкой\diceware.txt");
// разбивка на пары ключ-значение
Dictionary<int, string> words = lines.ToDictionary(x => int.Parse(x.Split(' ')[0]), y => y.Split(' ')[1]);
// составление числа из цифр, не супер решение, но так тоже можно
int index = int.Parse(new string(numbers.Select(x => x.ToString()[0]).ToArray());
if (words.TryGetValue(index, out string word))
{
    MessageBox.Show(word, "Найдено");
}
else
{
    MessageBox.Show("Не найдено");
}
READ ALSO
сравнение в словаре по особому ключу

сравнение в словаре по особому ключу

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

159
Получить количество элементов из другого класса

Получить количество элементов из другого класса

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

159
Как/Где хранить состояние авторизованного пользователя?

Как/Где хранить состояние авторизованного пользователя?

У меня есть сайт с авторизациейИ когда пользователь вводит верный пароль мне нужно сохранять некоторую информацию о нём в виде объекта User

131
Не до конца выполняется BackgroundWorker. C#

Не до конца выполняется BackgroundWorker. C#

Есть BackgroundWorker который выполняет некий кодПосле окончания работы, он должен написать переменную в label

142