Manipulação de sindicatos, subconjuntos e supersets em Scala
-
11-09-2019 - |
Pergunta
Eu preciso escrever um trecho de código que comparar várias matrizes e produzir o conjunto que coincide com os dados nessas matrizes, produzir o conjunto de dados apenas em conjunto A, mas não no conjunto B, C, D, em conjunto B, mas não em a, C, D, sendo capaz de lidar com qualquer número de matrizes (isto é enrolada de forma dinâmica). O código deve utilizar funções anônimas em Scala (ou seja, não como uma matriz regular looping como em Java).
Solução
soa como lição de casa para me. De longe a maneira mais fácil de fazer isso é jogar o conteúdo do array A em um Set
e usar a operação de remoção. Isso seria O (n) , onde n = \ sum {| A |, | B |, | C |, ...}. A solução a seguir funciona para Iterable
arbitrária, não apenas 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
}