¿Hay alguna llamada de biblioteca estándar que pueda usar para realizar operaciones de conjunto en dos matrices o implementar dicha lógica yo mismo (idealmente, de la manera más funcional y eficiente posible)?
100
¿Hay alguna llamada de biblioteca estándar que pueda usar para realizar operaciones de conjunto en dos matrices o implementar dicha lógica yo mismo (idealmente, de la manera más funcional y eficiente posible)?
Respuestas:
Sí, Swift tiene la
Set
clase.Swift 3.0+ puede realizar operaciones en conjuntos como:
Swift 2.0 puede calcular sobre argumentos de matriz:
Swift 1.2+ puede calcular en conjuntos:
Si está utilizando estructuras personalizadas, debe implementar Hashable.
Gracias a Michael Stern en los comentarios por la actualización de Swift 2.0.
Gracias a Amjad Husseini en los comentarios por la información de Hashable.
fuente
set1.union(array2)
yset1.exclusiveOr(array2)
ambos son legítimos, además de los formularios mostrados anteriormente.No hay llamadas de biblioteca estándar, pero es posible que desee consultar la biblioteca ExSwift . Incluye un montón de funciones nuevas en Arrays que incluyen diferencia, intersección y unión.
fuente
Es posible que desee seguir el mismo patrón que en Objective-C, que también carece de tales operaciones, pero hay una solución simple:
¿Cómo intersecar dos matrices en el objetivo C?
fuente
El método más eficiente que conozco es el uso de números godel. Google para codificación godel.
La idea es así. Suponga que tiene N números posibles y necesita hacer conjuntos de ellos. Por ejemplo, N = 100.000 y desea crear conjuntos como {1,2,3}, {5, 88, 19000}, etc.
La idea es mantener la lista de N números primos en la memoria y para un conjunto dado {a, b, c, ...} se codifica como
Así que codificas un conjunto como BigNumber. Las operaciones con BigNumbers, a pesar de que son más lentas que las operaciones con Integers, siguen siendo muy rápidas.
Para unir 2 conjuntos A, B, toma
mínimo común múltiplo de A y B, ya que A y B son conjuntos y ambos números.
Para hacer la intersección que tomas
máximo común divisor.
y así.
Esta codificación se llama godelización, puedes buscar más en Google, todo el lenguaje de la aritmética escrito usando la lógica de Frege se puede codificar usando números de esta manera.
Para conseguir la operación is-member? Es muy simple --
Conseguir el cardenal es un poco más complicado.
descompone el número S que representa el conjunto en producto de factores primos y suma sus exponentes. En caso de que el conjunto no permita duplicados, todos los exponentes serán 1.
fuente