根据 属性? 组织数组中的对象
Organize objects in an array depending on their property?
如何根据 属性 组织对象数组?例如,假设我有这个:
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)
]
如何根据 character type
组织 people
数组?
我希望所有生气的人都先是,然后是快乐,然后是悲伤,然后是害怕。
我该怎么做? var newArray : [Person] ...
还有一件事我已经尝试过以下方法:
func organizeArray(){
var newArray = [Person]()
var array1 = []
var array2 = []
var array3 = []
var array4 = []
var array5 = []
for person in people {
switch person.charcter {
case happy...
append to array 1
case mad...
append to array 2
so on...
}
}
newArray = array1 + array2 + array3 + array4 + array5
}
但是当我 运行 这需要 XCode 永远索引。如果我删除此功能,一切正常。我想要一个简单的解决方案,并且不会导致 XCode 永远索引(很多)。
你在做什么,是为每种字符类型创建一个单独的数组,然后将它们连接在一起。这效率不高。正如 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 { [=10=].charcter.rawValue < .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
如何根据 属性 组织对象数组?例如,假设我有这个:
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)
]
如何根据 character type
组织 people
数组?
我希望所有生气的人都先是,然后是快乐,然后是悲伤,然后是害怕。
我该怎么做? var newArray : [Person] ...
还有一件事我已经尝试过以下方法:
func organizeArray(){
var newArray = [Person]()
var array1 = []
var array2 = []
var array3 = []
var array4 = []
var array5 = []
for person in people {
switch person.charcter {
case happy...
append to array 1
case mad...
append to array 2
so on...
}
}
newArray = array1 + array2 + array3 + array4 + array5
}
但是当我 运行 这需要 XCode 永远索引。如果我删除此功能,一切正常。我想要一个简单的解决方案,并且不会导致 XCode 永远索引(很多)。
你在做什么,是为每种字符类型创建一个单独的数组,然后将它们连接在一起。这效率不高。正如 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 { [=10=].charcter.rawValue < .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