How to get unique identifier of objects in swift array

I have my own class like this -

class Event: NSObject
{
    var eventID: String?
    var name:String?
}

Now I have an array of an object Eventlike

var events = [Event]()

var event1 = Event()
event1.eventID = "1"
event1.name = "Anu"

var event2 = Event()
event2.eventID = "2"
event2.name = "dev"

var event3 = Event()
event3.eventID = "1"
event3.name = "Anu"

events.append(event1)
events.append(event2)
events.append(event3)

to get unque eventID from an array, I wrote code that works fine -

func getUniqueIDsFromArrayOfObjects(events:[Event])->NSArray
{
    let arr = events.map { $0.eventID!}
    let uniquearr:NSMutableArray = NSMutableArray()
    for obj in arr
    {
        if !uniquearr.containsObject(obj) {
            uniquearr.addObject(obj)
        }
    }
    return uniquearr;
}

print(getUniqueIDsFromArrayOfObjects(events))

I wanted to know if there is an alternative way to get a unique identifier from an array of objects more efficiently than I use. Maybe something using NSPredicate.

Since the array has thousandsobjects, my code will do more iterations.

+4
source share
3 answers

Set . , , Swift, NSArray .

func getUniqueIDsFromArrayOfObjects(events:[Event])->[String]
{
   let eventIds = events.map { $0.eventID!}
   let idset = Set(eventIds)
   return Array(idset)
}
+9

A Set - , , . :

func getUniqueIDsFromArrayOfObjects(events:[Event])->[Event] {
    return Array(Set(events.map { $0.eventID! }))
}

, undefined, , , .

+2
    let uniqueRecords = jobs.reduce([], {
        $0.contains($1) ? $0 : $0 + [$1]
    })
0
source

Source: https://habr.com/ru/post/1648251/


All Articles