Реализация многомерного массива для вывода имен и адресов в c#

#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!");  } }