#c#
#c#
Вопрос:
У меня есть такой код, он запрашивает ввод имени 1-5 и адреса 1-5, я хочу, чтобы он определял имя из строки, и в разделе имя поиска он запросит имя из ввода пользователя и выведет адрес, который был ранее введен.
string[,] input = new string[5, 2]; var Name = new HashSetlt;stringgt;(StringComparer.OrdinalIgnoreCase); for (int a = 0; a lt; input.GetLength(0); a) { while (true) { Console.Write($"Name {a 1} : "); input[a, 0] = Console.ReadLine(); if (Name.Add(input[a, 0])) break; Console.WriteLine("Name is already added! please input a different name"); } Console.Write($"Address {a 1} : "); input[a, 1] = Console.ReadLine(); } while(true) { Console.Write("n==gt; Search Name : "); string nameSearch = Console.ReadLine(); if (Name.Contains(nameSearch)) { Console.Write($"Address : {input[1, 1]}"); } else { Console.Write("Name cannot be found!"); } }
Мне уже удалось сделать такой вывод
Имя 1: пример имени a
Адрес 1: пока не может быть закодирован
Имя 2: пример имени b
Адрес 2: пока не может быть закодирован
Имя 3: пример имени c
Адрес 3: пока не может быть закодирован
Имя 4: пример имени d
Адрес 4: пока не может быть закодирован
Name 5: example name e
Address 5: cannot be coded yet
And i want it to output:
Name 1: example name a
Address 1: address 1 input from user. ex: Mango number 7
Name 2: example name b
Address 2: address 2 input from user. ex: Pineapple number 12
Name 3: example name c
Address 3: address 3 input from user. ex: Blueberry number 44
Name 4: example name d
Address 4: address 4 input from user. ex: Apple number 3
Name 5: example name e
Address 5: address 1 input from user. ex: Cherry number 5
Ответ №1:
Простой линейный поиск будет работать.
while(true) { Console.Write("n==gt; Search Name : "); string nameSearch = Console.ReadLine(); bool found = false; for(int i = 0; i lt; input.GetLength(0); i ) { if (input[i, 0] == nameSearch) { Console.Write($"Address : {input[i, 1]}"); found = true; break; } } if (!found) { Console.Write("Name cannot be found!"); } }
Вы можете проверить хэш-карту перед циклом, но вам все равно нужно будет выполнить цикл, если будет обнаружено, что хэш-карта содержит имя.
while(true) { Console.Write("n==gt; Search Name : "); string nameSearch = Console.ReadLine(); if (Name.Contains(nameSearch)) { for(int i = 0; i lt; input.GetLength(0); i ) { if (input[i, 0] == nameSearch) { Console.Write($"Address : {input[i, 1]}"); break; } } } else { Console.Write("Name cannot be found!"); } }
Или вы можете избавиться от хэш-карты и 2d-массива и использовать Dictionarylt;string, stringgt;
, где ключом является имя, а значением-адрес.
var data = new Dictionarylt;string, stringgt;(); for (int a = 0; a lt; 5; a) { string name; while (true) { Console.Write($"Name {a 1} : "); name = Console.ReadLine(); if (!data.ContainsKey(name)) { break; } Console.WriteLine("Name is already added! please input a different name"); } Console.Write($"Address {a 1} : "); var address = Console.ReadLine(); data[name] = address; } while(true) { Console.Write("n==gt; Search Name : "); string nameSearch = Console.ReadLine(); if (data.ContainsKey(nameSearch) ) { Console.Write($"Address : {data[nameSearch]}"); } else { Console.Write("Name cannot be found!"); } }