Итак, сначала избавитесь от путаницы, что ваши наборы являются массивами. Для остальной части примера я буду использовать это определение вместо:
val arrays = Array(Array("Shoes", "heels", "sneakers"), Array("dress", "maxi dress"), Array("jeans", "boyfriend jeans", "destroyed jeans"))
Таким образом, в некотором смысле у вас есть массив массивов эквивалентных объектов и хотите удалить все, кроме одного из них?
Ну, сначала вы должны найти, какой из элементов в массиве фактически используется в качестве ключей в мегацентре. Поэтому мы просто отфильтровываем все элементы, которые не используются в качестве ключей:
array.filter(map.keySet)
Теперь мы должны выбрать один элемент. Как вы сказали, мы просто взять первый:
array.filter(map.keySet).head
в качестве «наборов» на самом деле являются массивы, это действительно первый элемент в массиве, который также используется в качестве ключа. Если бы вы действительно использовали наборы, этот код все равно работал бы, поскольку наборы фактически имеют «первый элемент». Это просто специфическая реализация, и она может даже не быть детерминированной по сравнению с различными исполнениями одной и той же программы. По крайней мере, для неизменяемых наборов он должен, однако, быть детерминированным по нескольким вызовам в голову, т. Е. Вы всегда должны получать один и тот же элемент.
Вместо первого элемента мы на самом деле заинтересованы во всех остальных элементов, так как мы хотим, чтобы удалить их с карты:
array.filter(map.keySet).tail
Теперь мы просто должны удалить те из карты:
map -- array.filter(map.keySet).tail
И сделать это для всех массивов:
map -- arrays.flatMap(_.filter(map.keySet).tail)
Это прекрасно работает до тех пор, как массивы реже. Если это не так, мы не можем взять исходную карту для фильтрации массива на каждом шаге. Вместо этого мы должны использовать один массив для вычисления новой карты, а затем выполнить следующий запуск с результатом из последнего и так далее. К счастью, мы не должны делать:
arrays.foldLeft(map){(m,a) => m -- a.filter(m.keySet).tail}
Примечание: Множества и функции от элементов к Boolean, это, почему это решение работает.
Как вы выбираете, какой набор элементов или карта ключевых побед над другими, когда они оба перекрытия? – Daenyth
Не имеет значения. Может просто выбрать первый элемент в наборе. –
Не могли бы вы немного расширить свои примеры - не можете понять, что вы пытаетесь сделать ... tks – wwkudu