Ryan
Ryan

Reputation: 155

Swift: sort array by comparing another array

I have two arrays:

@State var myInterests: [String] = ["Beer", "Food", "Dogs", "Ducks"]
@State var otherInterests: [String] = ["Ducks", "Baseball", "Beer", "Pasta"]

I need to display a list with all shared interests listed first (top of the list), and then the others after.

ForEach(interests, id: \.self) { tag in
   Text(tag)
}

The result for otherInterests should be something like:

["Ducks", "Beer", "Baseball", "Pasta"]

Is there any way of sorting the array to move the shared interests to the front of the array and the remaining ones after?

Upvotes: 0

Views: 154

Answers (1)

CloudBalancing
CloudBalancing

Reputation: 1686

As long as the order of the subitems is not that important (you can sort each sublist to make sure consistent output) - a simple solution can be to use sets here!

Something like this

let myInterests: [String] = ["Beer", "Food", "Dogs", "Ducks"]
let otherInterests: [String] = ["Ducks", "Baseball", "Beer", "Pasta"]
// This will result only in the shared interests between my and other
let sharedInterests = Set(myInterests).intersection(Set(otherInterests))
// This will result in only the not shared interests
let resetOfOtherInterest = Set(otherInterests).subtracting((Set(sharedInterests)))
// Here we combine the two (which are disjoint!)
let newOtherInterest = Array(sharedInterests) + Array(resetOfOtherInterest)

print(newOtherInterest)

newOtherInterest = ["Ducks", "Beer", "Baseball", "Pasta"]

Upvotes: 2

Related Questions