Kjell
Kjell

Reputation: 432

Comparing two arrays in swift, with different lengths

I want to compare two arrays with each other and append the value that is not in the other array to a new array. The problem now is that all of the values that does not equal the other array already get appended, but I want only the values that are new in the other array getting appended.

I hope that the problem is clear. Sorry if it's a very vague question. I try to be clear haha. The code and output is printed below:

// Iterate through all possible values
for i in 0...messages.count-1{
    var match = false

    for r in 0...self.messages.count-1{
       println("NIEUWE" + messages[i].getID() + "OUDE" + self.messages[r].getID())


        if(messages[i].getID().toInt() == self.messages[r].getID().toInt()){

            var match = true

            println(match)
            break
        }


    }

    if (!match) {
        newArray.append(messages[i])
        println(newArray)
    }
}

Output:

NIEUWE170OUDE170
NIEUWE170OUDE171
true
[PostDuif.Message]
NIEUWE171OUDE170
true
[PostDuif.Message, PostDuif.Message]
NIEUWE172OUDE170
true

Upvotes: 0

Views: 3992

Answers (1)

GoZoner
GoZoner

Reputation: 70135

This "I want to compare two arrays with each other and append the value that is not in the other array to a new array" is just 'set difference'

var s1 = Set(["a", "b", "c"])   // this to be similar to your need
var s2 = Set(["b", "c", "d"])    
var s3 = s2.subtract (s1)

As such:

  9> var s3 = s2.subtract(s1)
s3: Set<String> = {
  [0] = "d"
}

Note that you have subtract, intersect, and union with inPlace options as methods on the Set type. New to Swift 1.2.

Upvotes: 2

Related Questions