Arrays 是否根据对象的属性在数组中组织对象?

Arrays 是否根据对象的属性在数组中组织对象?,arrays,swift,ios8,Arrays,Swift,Ios8,如何根据对象的属性组织对象数组?例如,如果我有以下内容: 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 : [Pe

如何根据对象的属性组织对象数组?例如,如果我有以下内容:

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)

]
如何根据人物的
字符类型组织
人物
数组? 我希望所有疯狂的人在新的阵营里先是快乐,然后是悲伤,然后是恐惧

我该怎么做<代码>var newArray:[个人]…

还有一件事我已经试过了:

   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永远索引(很多)。

您要做的是为每种字符类型创建一个单独的数组,然后将它们连接在一起。这是没有效率的。正如所建议的,您应该使用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
struct-Person{
let name:String
年龄:Int
let character:characterType
枚举字符类型:Int{
case mad=0,快乐、悲伤、恐惧、兴奋
}
}
让人:[人]=[
人物(姓名:“鲍勃”,年龄:10岁,性格:Person.characterType.happy),
人物(姓名:“乔”,年龄:45,角色:Person.characterType.sad),
人物(姓名:“汤姆”,年龄:105,角色:Person.characterType.Fear),
Person(姓名:“Mad”,年龄:3岁,角色:Person.characterType.Mad)
]
设newArray=people.sorted{$0.character.rawValue<$1.character.rawValue}
println(newArray[0].character.rawValue)//Mad
println(newArray[1].character.rawValue)//Happy
println(newArray[2].character.rawValue)//Sad
println(newArray[3].character.rawValue)//

它真的会导致“Xcode永远索引”吗?我怀疑……我认为进入无限循环的是您的代码,而这实际上与Xcode无关(因为它只是编辑器,不是您的代码)至于如何对数组进行排序:使用它的
sort
方法,并传入一个比较器闭包,该闭包使用您需要的任何属性来比较两个对象。@paramagneticscroissant我是说