Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set operations (union, intersection) on Swift array?

Are there any standard library calls I can use to either perform set operations on two arrays, or implement such logic myself (ideally as functionally and also efficiently as possible)?

like image 862
devios1 Avatar asked Jul 05 '14 18:07

devios1


People also ask

Which one is faster array or set in Swift?

Difference between an Array and Set in SwiftArray is faster than set in terms of initialization.

How set works internally Swift?

Internally, A set in Swift uses a hash table to store elements in the set. Let us consider an example, we want to check the number of unique or different marks scored by students in a class. A set can be used to accomplish this task. Let a list containing marks be, list = [98, 80, 86, 80, 98, 98, 67, 90, 67, 84].

Are sets ordered in swift?

Swift provides three primary collection types, known as arrays, sets, and dictionaries, for storing collections of values. Arrays are ordered collections of values. Sets are unordered collections of unique values.

How do you make a set in Swift?

Swift makes it as easy to create a new set as to create a new array. Simply assign an array literal to a variable or constant with the Set type specified. let ingredients: Set = ["cocoa beans", "sugar", "cocoa butter", "salt"] if ingredients.


1 Answers

Yes, Swift has the Set class.

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+ can do operations on sets as:

firstSet.union(secondSet)// Union of two sets firstSet.intersection(secondSet)// Intersection of two sets firstSet.symmetricDifference(secondSet)// exclusiveOr 

Swift 2.0 can calculate on array arguments:

set1.union(array2)       // {"a", "b", "c", "d"}  set1.intersect(array2)   // {"a", "b"} set1.subtract(array2)    // {"c"} set1.exclusiveOr(array2) // {"c", "d"} 

Swift 1.2+ can calculate on sets:

set1.union(set2)        // {"a", "b", "c", "d"} set1.intersect(set2)    // {"a", "b"} set1.subtract(set2)     // {"c"} set1.exclusiveOr(set2)  // {"c", "d"} 

If you're using custom structs, you need to implement Hashable.

Thanks to Michael Stern in the comments for the Swift 2.0 update.

Thanks to Amjad Husseini in the comments for the Hashable info.

like image 98
joelparkerhenderson Avatar answered Sep 28 '22 05:09

joelparkerhenderson