Проверьте, удовлетворяют ли все первые элементы в списке кортежей условию

#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