Как я могу использовать dictionary для сопоставления ключей, расположенных в одном списке строк, со значениями, расположенными в другом списке строк, используя C #?

#c# #string #list #dictionary

#c# #строка #Список #словарь

Вопрос:

У меня есть два списка строк; myFruits и MyColors.

myFruits имеет следующий формат:

  ["Apple", "Banana", "Guava", "Blueberry"] //key
  

MyColors имеет следующий формат:

 ["Red", "Yellow", "Green", "Blue"]  //value
  

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

 Apple:Red
Banana:Yellow
Guava:Green
Blueberry:Blue
  

Я пытался использовать zip в своем коде, но что-то, что я делаю, неправильно, поскольку оно неправильно печатает.

 var dic = myFruits.Zip(myColors, (k, v) => new { k, v }).ToDictionary(x => x.k, x => x.v); 
  

Как я могу добиться желаемого результата? Это всего лишь примерный пример, у меня может быть несколько значений в моем списке при каждом запуске, но всегда будет одинаковое количество элементов в обоих списках, независимо от того, какое число. Любая помощь будет с благодарностью принята.

Комментарии:

1. Как вы его печатаете и что он показывает? Ваше использование Zip выглядит нормально.

2. работает для меня dotnetfiddle.net/CYAItl

3. Я неправильно печатал его. Теперь он работает правильно. Спасибо!

Ответ №1:

Это больше похоже на проблему вывода. Смотрите приведенный ниже код для создания <fruit>:<color> строки.

 var myFruits = new []{"Apple", "Banana", "Guava", "Blueberry"};
var myColors = new []{"Red", "Yellow", "Green", "Blue"};

var dic = myFruits.Zip(myColors, (k, v) => new { k, v }).ToDictionary(x => x.k, x => x.v);

foreach(var kvp in dic)
{
    Console.WriteLine($"{kvp.Key}:{kvp.Value}");
}
  

Выводит:

 Apple:Red
Banana:Yellow
Guava:Green
Blueberry:Blue
  

Комментарии:

1. Это действительно была проблема с выводом. Я неправильно распечатал его. Теперь работает нормально. Спасибо!

Ответ №2:

У вас есть проблемы с неиспользованием расширения LINQ?

 var myFruits = new [] {"Apple", "Banana"};
var myColors = new [] {"Red", "Yellow"};
var mapping = new Dictionary<string, string>();

for(var i = 0; i < myFruits.Count(); i  )
{
  mapping.Add(myFruits[i], myColors[i]);
}
  

Комментарии:

1. Слишком старый стиль! (и к тому же слишком читабельный, по сравнению с Linq Zip -способом). Linq — это здорово, но принят var dic = myFruits.Zip(myColors, (k, v) => new { k, v }).ToDictionary(x => x.k, x => x.v); ли он лучше, чем ваши 3 строки кода? Я так не думаю