Я новичок в C#.Как обращаться с дублирующимися ключами при соединении двух списков?
У меня есть следующая структура.
struct Foo
{
string key;
Bar values;
}
У меня есть два списка Foo, L1 и L2 одинакового размера, оба содержат одинаковый набор ключей.
Мне нужно объединить соответствующие экземпляры Foo в L1 и L2.
Foo Merge(Foo f1, Foo f2)
{
// merge f1 and f2.
return result.
}
Для этого я написал следующие данные.
resultList = L1.Join(L2, f1 => f1.key, f2 => f2.key, (f1, f2) => Merge(f1, f2)
).ToList())
Моя проблема в том, что мой ключ не уникален. У меня есть n количество элементов в L1 с одним и тем же ключом (например, «key1») (которые также появляются в L2 где-то). Таким образом, вышеупомянутый оператор соединения выбирает n совпадающих записей из L2 для каждого «ключа1» из L1, и я получаю n * n элементов с ключом «key1» в результате, где я хочу только n. (Итак, это своего рода кросспродукт для тех наборов элементов).
Я хочу использовать Join и по-прежнему выбирать элемент из L1 с помощью клавиши «key1» и принудительно использовать Linq для использования первого доступного «неиспользуемого» элемента «key1» из L2. Это возможно? Соединиться с плохой идеей здесь?
(Кроме того, я хочу сохранить порядок ключей, как в L1. Я пытался обработать все элементы с такими ключами до объединения и удалить эти записи из L1 и L2. Это нарушило порядок ключей и это выглядело уродливо).
Я ищу решение без каких-либо явных для циклов.
все ключи в первом списке находятся во втором списке, но в другом порядке, или это еще сложнее? –
Это еще сложнее. Двойные ключи присутствуют несколько раз. – PermanentGuest
Да, но если у вас есть 3 раза «3» в качестве ключа в первом списке, у вас будет 3 раза «3» в качестве второго во втором списке (но не в том же месте)? –