Я довольно новый функциональный программирование, поэтому я прохожу некоторые практические упражнения. Я хочу написать функцию, учитывая матрицу из уникальных естественных чисел, скажем, 5x5, вернуть коллекцию уникальных матриц меньшего размера, скажем 3x3, где матрицы должны быть неповрежденными, т. Е. Созданы из значений, смежных в оригинале.найти уникальные матрицы из более крупной матрицы
01 02 03 04 05
06 07 08 09 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
Простой. Просто скользить, а затем вниз, по одному в группах по 3, чтобы получить что-то, что выглядит как:
01 02 03 | 02 03 04 | 03 04 05 | 06 07 08
06 07 08 | 07 08 09 | 08 09 10 | 11 12 13
11 12 13 | 12 13 14 | 13 14 15 | 16 17 18
или, в Scala,
List(List(1, 2, 3), List(6, 7, 8), List(11, 12, 13))
List(List(2, 3, 4), List(7, 8, 9), List(12, 13, 14))
List(List(3, 4, 5), List(8, 9, 10), List(13, 14, 15))
List(List(6, 7, 8), List(11, 12, 13), List(16, 17, 18))
и так далее и так далее ...
Так я рискую с Scala (мой язык по выбору, потому что это позволяет мне развиваться с императивом к функциональным, и я провел последние несколько лет в Java.
val array2D = "01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25".grouped(3).map(_.trim.toInt).grouped(5)
val sliced = array2D.map(row => row.sliding(3, 1).toList).sliding(3, 1).toList
Теперь у меня есть структура данных, с которой я могу работать, но я не вижу функционального способа. Конечно, я могу пройти каждый кусок sliced
, создать var matrix = new ListBuffer[Seq[Int]]()
и поистине создать сумку из них, и я закончен.
Я хочу найти функциональный, идеально беспроблемный подход, используя Scala, но я в тупике. Там должен быть способ сделать zip с 3 или что-то в этом роде ... Я искал ScalaDocs и, похоже, не понял его.
Удивительный ответ - спасибо – andyczerwonka
Мне пришлось сменить свой код - он не будет компилироваться, потому что фрагмент «разрезанный flatMap (_.transpose)» не возвращает 'Seq [Seq [Int]]', тип 'Matrix' , – andyczerwonka
@arcticpenguin Нет, он возвращает 'List [Seq [Seq [Int]]]', который является типом, который я использую в своем коде. Он возвращает список матриц, а не одну матрицу. Поэтому я не понимаю, о каких изменениях вы говорите. –