2015-08-30 75 views
-1

如何根據屬性組織對象數組?例如可以說,如果我有這樣的:根據他們的character type根據其屬性組織對象在數組中?

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陣列?我希望所有瘋狂的人都是第一個,然後開心,然後傷心,然後害怕在一個新的數組。

我該怎麼做? 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永遠指數。如果我刪除這個函數everyting正常工作。我想要一個簡單的解決方案,並且不會導致XCode永遠索引(很多)。

+1

它真的會導致「Xcode的索引永遠」?我懷疑...我認爲它是**你的代碼**進入一個無限循環,這實際上*沒有*與Xcode做(因爲它只是編輯器,它不是你的代碼。)至於如何* * sort **你的數組:使用它的'sort'方法並傳入一個比較閉包,它使用你需要的任何屬性比較兩個對象。 –

+0

@TheParamagneticCroissant我的意思是 – Entitize

回答

3

你在做什麼是爲每個字符類型創建一個單獨的數組,然後將它們連接在一起。這不是有效的。正如the-paramagnetic-croissant建議你應該使用這樣一個原始值,以枚舉類型關聯的可能性相結合迅速陣列的排序功能:

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 
+0

這是正確的答案。 –

+0

非常感謝! – Entitize