根据属性组织数组中的对象?

时间:2015-08-30 13:35:33

标签: arrays swift ios8

如何根据属性组织对象数组?例如,如果我有这个:

B

如何根据import UIKit import SpriteKit struct Person { let name : String! let age : Int! let charcter : characterType! enum characterType { case happy, sad, mad, scared, excited } } let people : [Person] = [ Person(name: "Bob", age: 10, charcter: Person.characterType.happy), Person(name: "Joe", age: 45, charcter: Person.characterType.sad), Person(name: "Tom", age: 105, charcter: Person.characterType.scared), Person(name: "Mad", age: 3, charcter: Person.characterType.mad) ] 组织people数组? 我想一切都是疯狂的人是第一个,那么快乐,那么伤心,那么吓得一个新的数组。

我该怎么做? character type

还有一件事我已经尝试过以下几点:

var newArray : [Person] ...

但是当我运行它时,XCode永远需要索引。如果我删除此功能,每个工作正常。我想要一个简单的解决方案,并且不会导致XCode永远索引(很多)。

1 个答案:

答案 0 :(得分:3)

你在做什么是为每个字符类型创建一个单独的数组,然后将它们连接在一起。这效率不高。正如the-paramagnetic-croissant所建议的那样,您应该使用swift数组的排序功能,并且可以通过这种方式将原始值与枚举类型相关联:

struct Person {
    let name : String
    let age : Int
    let charcter : characterType

    enum characterType: Int {
       case mad = 0, happy, sad, scared, excited
   }
}

let people : [Person] = [
    Person(name: "Bob", age: 10, charcter: Person.characterType.happy),
    Person(name: "Joe", age: 45, charcter: Person.characterType.sad),
    Person(name: "Tom", age: 105, charcter: Person.characterType.scared),
    Person(name: "Mad", age: 3, charcter: Person.characterType.mad) 
]

let newArray = people.sorted { $0.charcter.rawValue < $1.charcter.rawValue }

println(newArray[0].charcter.rawValue) // Mad
println(newArray[1].charcter.rawValue) // Happy
println(newArray[2].charcter.rawValue) // Sad
println(newArray[3].charcter.rawValue) // Scared