Простой способ объединить два списка в поисковый KVP, который отображается между двумя списками

У меня есть два списка, скажем

    OtherColors = Color[]
    {
        Color.FromRgb(1,0,0),
        Color.FromRgb(0,0,1),
        Color.FromRgb(1,0,15),
    };

    Colors = Color[]
    {
        Color.FromRgb(1,4,4),
        Color.FromRgb(5,6,66),
        Color.FromRgb(4,5,7),
        Color.FromRgb(7,5,8),
        Color.FromRgb(2,9,2),
        Color.FromRgb(4,2,190),
        Color.FromRgb(5,5,2),
        Color.FromRgb(180,5,7),
        Color.FromRgb(5,9,171),
    };

Какой самый быстрый / простой способ объединить их в словарь, который служит таблицей поиска, так что каждый элемент в коротком списке повторяется три раза в качестве значения, и каждый элемент из более длинного списка просто вставляется в качестве ключа место как оно в длинном списке?

Нечто похожее на

ColorLookup = new Dictionary<Color, Color>
{
    {Color.FromRgb(1,4,4), Color.FromRgb(1,0,0)},
    {Color.FromRgb(5,6,66), Color.FromRgb(1,0,0)},
    {Color.FromRgb(4,5,7), Color.FromRgb(1,0,0)},
    {Color.FromRgb(7,5,8), Color.FromRgb(0,0,1)},
    {Color.FromRgb(2,9,2), Color.FromRgb(0,0,1)},
    {Color.FromRgb(4,2,190),Color.FromRgb(0,0,1)},
    {Color.FromRgb(5,5,2), Color.FromRgb(1,0,15)},
    {Color.FromRgb(180,5,7),Color.FromRgb(1,0,15)},
    {Color.FromRgb(5,9,171),Color.FromRgb(1,0,15)},
};

Я знаю, что это просто, но я отказываюсь от этого...

2 ответа

Решение

Вы не получите намного быстрее, чем простой цикл. Проще всего спорить, но я предпочитаю linq-решения.

var ColorLookup = Colors.Select((c,i) => new { Key = c, Value = OtherColors[i / OtherColors.Length]}).ToDictionary(v => v.Key, v=> v.Value);

Тест здесь

Не так круто, как вы надеялись, но это работает, при условии, что эти списки остаются такими же, как они:

var output = new Dictionary<Color, Color>();
for (int i = 0; i < colors.Length; i++)
{
    output.Add(colors[i], otherColors[(int)Math.Floor(i / 3M)]);
}

Вы можете параметризовать его для обработки списков разных размеров и проверки границ.

Другие вопросы по тегам