Учитывая два IEnumerable
с одинакового размера, как я могу преобразовать его в Dictionary
, используя Linq?
IEnumerable<string> keys = new List<string>() { "A", "B", "C" };
IEnumerable<string> values = new List<string>() { "Val A", "Val B", "Val C" };
var dictionary = /* Linq ? */;
И ожидаемый результат:
A: Val A
B: Val B
C: Val C
Интересно, есть ли какой-нибудь простой способ добиться этого?
И стоит ли беспокоиться о производительности? Что делать, если у меня большие коллекции?
Нет, если есть более простой способ сделать это, в настоящее время я делаю так:
У меня есть метод Extension, который будет зацикливать IEnumerable
, предоставляя мне элемент и порядковый номер.
public static class Ext
{
public static void Each<T>(this IEnumerable els, Action<T, int> a)
{
int i = 0;
foreach (T e in els)
{
a(e, i++);
}
}
}
И у меня есть метод, который зациклит один из перечисляемых и с помощью индекса извлекает эквивалентный элемент из другого перечисляемого.
public static Dictionary<TKey, TValue> Merge<TKey, TValue>(IEnumerable<TKey> keys, IEnumerable<TValue> values)
{
var dic = new Dictionary<TKey, TValue>();
keys.Each<TKey>((x, i) =>
{
dic.Add(x, values.ElementAt(i));
});
return dic;
}
Тогда я использую это как:
IEnumerable<string> keys = new List<string>() { "A", "B", "C" };
IEnumerable<string> values = new List<string>() { "Val A", "Val B", "Val C" };
var dic = Util.Merge(keys, values);
И вывод правильный:
A: Val A
B: Val B
C: Val C