В Java все находится в форме класса.
Если вы хотите использовать любой объект, тогда у вас есть две фазы:
Пример:
Object a;
a=new Object();
То же самое для концепции массива
Item i[]=new Item[5];
i[0]=new Item();
Если вы не дают секцию инициализации, тогда возникает NullpointerException
.
Да, Swift имеет класс Set
.
let array1 = ["a", "b", "c"]
let array2 = ["a", "b", "d"]
let set1:Set<String> = Set(array1)
let set2:Set<String> = Set(array2)
Swift 3.0+ может выполнять операции над наборами как:
firstSet.union(secondSet)// Union of two sets
firstSet.intersection(secondSet)// Intersection of two sets
firstSet.symmetricDifference(secondSet)// exclusiveOr
Swift 2.0 может вычислять по аргументам массива :
set1.union(array2) // {"a", "b", "c", "d"}
set1.intersect(array2) // {"a", "b"}
set1.subtract(array2) // {"c"}
set1.exclusiveOr(array2) // {"c", "d"}
Swift 1.2+ может рассчитывать на множествах:
set1.union(set2) // {"a", "b", "c", "d"}
set1.intersect(set2) // {"a", "b"}
set1.subtract(set2) // {"c"}
set1.exclusiveOr(set2) // {"c", "d"}
Если вы используете настраиваемые структуры, вам необходимо реализовать Hashable.
Спасибо Майклу Стерну в комментариях к обновлению Swift 2.0.
Спасибо Amjad Husseini в комментариях к информации Hashable.
Самый эффективный метод, который я знаю, - это использование чисел godel. Google для кодирования godel.
Идея такова. Предположим, у вас есть N возможных номеров, и вам нужно сделать их. Например, N = 100 000 и хотите сделать такие наборы, как {1,2,3}, {5, 88, 19000} и т. Д.
Идея состоит в том, чтобы сохранить список N простых чисел в памяти и для данного набора {a, b, c, ...} вы кодируете его как
prime[a]*prime[b]*prime[c]*...
. Таким образом, вы кодируете набор как BigNumber. Операции с BigNumbers, несмотря на то, что они медленнее операций с целыми, все еще очень быстрые.
Чтобы объединить 2 набора A, B, вы берете
UNITE(A, B) = lcm(a, b)
общий-кратный A и B, поскольку A и B являются наборами и обоими числами.
Чтобы сделать пересечение, которое вы берете
INTERSECT(A, B) = gcd (a, b)
наибольший общий делитель.
и т. д.
Эта кодировка называется godelization, вы можете google для большего, все языки арифметики, написанные с использованием логики Frege, могут быть закодированы с использованием чисел таким образом.
Чтобы получить операцию-член? это очень просто -
ISMEMBER(x, S) = remainder(s,x)==0
Чтобы получить кардинал, это немного сложнее -
CARDINAL(S) = # of prime factors in s
вы разлагаете число S, представляющее множество в произведении простых факторов и добавить их экспоненты. Если набор не позволяет дублировать, у вас будут все показатели 1.
Возможно, вам захочется следовать той же схеме, что и в Objective-C, которая также не имеет таких операций, но существует простой способ:
Нет стандартных вызовов библиотеки, но вы можете захотеть просмотреть библиотеку ExSwift . Он включает в себя множество новых функций в массивах, включая разницу, пересечение и объединение.
set1.union(array2)
иset1.exclusiveOr(array2)
являются законными, в дополнение к формам, показанным выше. – Michael Stern 2 October 2015 в 16:17