如何根据属性组织对象数组?例如,如果我有这个:
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永远索引(很多)。
答案 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