Ok. Я знаю. Это упражнение с курса Одерского. Но я так долго задерживался на этом.Создать все подмножество
определить метод для создания всех подмножеств входного набора:
def combination(occ: List[(Char,Int)]) : List[List[(Char,Int)]]
Примера: для ввода List(('a', 2), ('b', 2))
получить выход:
List(
List(),
List(('a', 1)),
List(('a', 2)),
List(('b', 1)),
List(('a', 1), ('b', 1)),
List(('a', 2), ('b', 1)),
List(('b', 2)),
List(('a', 1), ('b', 2)),
List(('a', 2), ('b', 2))
)
идеально. На данный момент я получаю две разные вещи: все пары (1a) и список для одного элемента (1b)
1a Работает. это дает мне все пары (кортежи в целом)
def combinations(occurrences: List[(Char,Int)]) : List[List[(Char,Int)]] = {
if (occurrences.isEmpty) List(Nil)
else {
val entry = occurrences.head;
for (
first <- (entry._2 to 1 by -1).toList;
rest <- combinations(occurrences.tail))
yield (entry._1, first) :: rest
}
}
Выходные List(List((a,2), (b,2)), List((a,2), (b,1)), List((a,1), (b,2)), List((a,1), (b,1)))
1b. Это работает, за исключением я не получаю пустой список (ну конечно я не)
def combinations(occurrences: List[(Char,Int)]) : List[List[(Char,Int)]] = {
for (entry <- occurrences;
freq <- (entry._2 to 1 by -1).toList) yield List((entry._1,freq))
}
Выход List(List((a,2)), List((a,1)), List((b,2)), List((b,1)))
Теперь я полностью застрял, как совместить оба. Не могли бы вы помочь мне понять, как я могу это достичь?
Мне очень нравится рассказывать об этом, потому что чтение таких вещей, когда я взял этот класс, подведет меня к стене, но это можно сделать в одном утверждении, т. Е. Не нужно '{}' необходимо после '=' , Это довольно длинный одиночный оператор (я разделил его на 3 строки), включающий рекурсию, несколько элементов из стандартной библиотеки и вызов одного другого метода в файле (подсказка: это следующий метод в этом файле). Надеюсь, это не более вредно, чем полезно. Удачи. – jwvh
Ум какой-нибудь совет только для методов стандартной библиотеки? –
Я использовал '::' и 'flatMap()' и удалял избыточность с 'distinct'. (Не говорите никому, я так сказал.) – jwvh