【问题标题】:How to get the unique id's of objects in an array swift如何快速获取数组中对象的唯一ID
【发布时间】:2016-07-18 13:01:17
【问题描述】:

我有一个这样的自定义类 -

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

现在我有一个 Event 对象的数组

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)

为了从数组中获取唯一的 eventID,我编写了这样的代码,效果很好 -

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))

我想知道是否有任何替代方法可以比我使用的更有效地从对象数组中获取唯一 ID。可能是使用NSPredicate 的东西。

因为一个数组有thousands 个对象,我的代码会进行更多的迭代。

【问题讨论】:

标签: ios swift custom-object arrayobject


【解决方案1】:

您可以使用Set 仅获取唯一值。我建议你让你的函数也返回一个 Swift 数组而不是 NSArray。

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

【讨论】:

    【解决方案2】:
        let uniqueRecords = jobs.reduce([], {
            $0.contains($1) ? $0 : $0 + [$1]
        })
    

    【讨论】:

      【解决方案3】:

      Set 是一个类似于数组的集合,可以防止重复。你可以这样做:

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

      请注意,集合中项目的顺序是不确定的,所以如果您关心元素的顺序,您应该尝试不同的解决方案。

      【讨论】:

      • 这会返回一个字符串数组而不是事件数组
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-20
      • 1970-01-01
      • 2019-01-03
      • 2010-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多