2016-10-03 42 views
0

我是在一個數組對象,我想排序多屬性排序斯威夫特陣列

let person = Person() 
person.isHome = true 
person.firstname = "Foo" 
person.surname = "Bar" 

等等

我取所有的人

guard let allPeople = controller.fetchedObjects as? Array<Person> else { return } 

現在我想過濾和分類

var homeArray = allPeople 
     .filter { $0.isHome == true } 
     .sort { $0.surname < $1.surname } 

所有罰款...除了,如果我想額外的「排序描述符」這樣的...

var homeArray = allPeople 
     .filter { $0.isHome == true } 
     .sort { $0.surname < $1.surname } 
     .sort { $0.firstname < $1.firstname } 
     .sort { $0.isOut == true && $1.isOut == false } 

我還是希望他們按姓氏排序的,但我也希望他們按姓氏後名字排序及以上非受傷受傷...什麼是語法?我似乎無法在任何地方找到它...我是否必須回去使用NSArray?

它是那樣簡單

.sort { ($0.isOut == true && $1.isOut == false) && ($0.firstname < $1.firstname) && ($0.surname < $1.surname)} 
+0

更改'NSFetchedResultsController'的'fetchRequest'這是更比'manual'過濾更高效/排序 – vadian

+0

如果我無法更改FRC,該怎麼辦?我知道這並沒有什麼意義,但是我正在爲一個框架工作,我必須在內部工作...所以我得到所有人,然後我必須在提取後進行篩選和排序......並不是那樣是不是一個更好的方式來做到這一點...更多的是,我需要這種排序語法,但具有多個屬性 – Magoo

回答

1
let new = [person,person1,person2,person3,person4] 

var homeInArray = new 
.filter { $0.isHome == true && $0.isInjured == true } 
var homeNINArray = new 
.filter { $0.isHome == true && $0.isInjured == false } 


var newHomeArray = homeInArray.sort { $0.firstName < $1.firstName } + homeNINArray.sort { $0.firstName < $1.firstName } 

嘗試一下這種解決方案

+0

對不起,如果我與bool語法混淆(這可能是錯誤的)我不想排序布爾人,但多種條件..我已經添加的名字也是 – Magoo

+0

這是一個公平的答案,我提出的確切問題,所以+1 ..但不完全是我需要知道的 – Magoo