Обработка союзов, подмножеств и надмножеств в Scala - PullRequest
1 голос
/ 05 июня 2009

Мне нужно написать фрагмент кода, который сравнивал бы несколько массивов и создавал набор, соответствующий данным в этих массивах, создавая набор данных только в массиве A, но не в массиве B, C, D, в массиве B, но не в A, C, D, будучи способным обрабатывать любое количество массивов (т.е. динамически зацикливаться). Код должен использовать анонимные функции в Scala (т. Е. Не как зацикливание обычного массива, как в Java).

1 Ответ

2 голосов
/ 05 июня 2009

Звучит как домашнее задание для меня. Безусловно, самый простой способ сделать это - выбросить содержимое массива A в Set и использовать операцию удаления. Это будет O (n) , где n = \ sum {| A |, | B |, | C |, ...}. Следующее решение работает для произвольных Iterable, а не только Array:

def compareArrays[A](arrs: List[Iterable[A]]) = arrs match {
  case a :: tail => {
    val set = a.foldLeft(Set[A]()) { _ + _ }
    tail.foldLeft(set) { _ -- _ }
  }

  case Nil => Nil
}
...