#list #scala #tuples
Вопрос:
Я хочу проверить, является ли список подмножеством другого, основываясь на первом элементе в его кортеже.
subset(List(('a', 1), ('b', 2), ('c', 3)), List(('a', 4), ('b', 5)) // True subset(List(('a', 1), ('b', 2), ('c', 3)), List(('a', 4), ('b', 5), ('f', 6)) // False
Размер списков не обязательно должен быть одинаковым. Я пробовал что-то подобное, но безуспешно
x.forall((char: Char, num: Int) =gt; {y.contains((_,num))})
Ответ №1:
Вы можете сопоставить в списках ввода, чтобы сохранить только первый элемент, а затем использовать некоторые функции набора для проверки равенства:
def subset(a: List[(Char, Int)], b: List[(Char, Int)]): Boolean = { val a_ = a.map(_._1).toSet val b_ = b.map(_._1).toSet b_.subsetOf(a_) }
Обновление: Упрощено на основе предложения Луиса
Комментарии:
1. Почему бы просто не
b_.subsetOf(a_)
сделать это ?2. Рассмотрим персонажей
aab
И.abb
Является ли одно подмножеством другого? Я так не думаю.3. Я забыл упомянуть, что персонажи уникальны, но в остальном вы правы @jwvh