2015-03-04 2 views
1

У меня есть класс, определяемый следующим образом:Как отсортировать массив по boolean в swift?

class someClass { 
    var isCompleted = false 
} 

как отсортировать список по someClass? если хотите переместить завершенные элементы в начало списка.

+0

Насколько велик список? Я думаю, что два '.filter's или даже цикл, скорее всего, будут более ясными для обсуждения (и, скорее всего, быстрее, но кого это волнует) –

+0

@BenjaminGruenbaum Вы хотите фильтровать его и объединить результат? – backslash112

+0

Да, вы также можете напрямую отсортировать его, но сортировка по булеву просто странная –

ответ

6

Вы можете сортировать по булевой собственности путем преобразования Значения в Int:

let arrayOfClasses = ... // array of classes 

let sortedArrayOfClasses = sorted(arrayOfClasses) { 
    Int($0.isCompleted) > Int($1.isCompleted) 
} 

Или с "на месте" сортировка: закрытие параметр

var arrayOfClasses = ... // array of classes 

sort(&arrayOfClasses) { 
    Int($0.isCompleted) > Int($1.isCompleted) 
} 
0
var yourArrayOfBooleans:[SomeClass] = ... 

var sortedArrayOfBooleans:[SomeClass] = [] 
var tmpArray:[SomeClass] = [] 

for ar in yourArrayOfBooleans 
{ 
    if ar.isCompleted 
    { 
      sortedArrayOfBooleans.append(ar) 
    } 
    else 
    { 
     tmpArray.append(ar) 
    } 
} 
sortedArrayOfBooleans += tmpArray 
2

для sort или sorted возвращает true, если первый параметр должен быть заказан до второго, иначе false.

Таким образом, вы можете:

let array = [ ... ] 

let sortedArray = array.sorted { a, b in 
    a.isCompleted && !b.isCompleted 
} 
Смежные вопросы