#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 строки кода? Я так не думаю