2016-12-13 10 views
0

Привет У меня есть следующиеОтсортировать массив кортежей в быстром 3

class MyClass { 
    var myString: String? 
} 

var myClassList = [String: MyClass]() 

Я хотел бы отсортировать этот массив в алфавитном порядке по переменной MyString в Swift 3 любые указатели?

+1

'myClassList' - это словарь, а не массив. Я рекомендую вам правильно получить структуры данных, прежде чем перейти к сортировке. – par

+0

'myClassList.sorted {($ 0.value.myString ??" ") <($ 1.value.myString ??" ")}' –

ответ

1

Прохладная проблема! Хотя я хотел бы отметить сначала, что [String: MyClass] - это словарь, а не Tupule.

Swift., Однако поддержка Tupules. Синтаксис для tupule будет выглядеть так:

var tupule: (String, MyClass) = (foo, bar) 

Затем нужно будет сделать массив из них:

var tupules:[(String, MyClass)] = [(foo, bar), (up, dog)] 

Тогда можно отсортировать этот массив:

tupules.sort({ $0[1].myString > $1[1].myString }) 

хотя вы должны определить более надежный механизм сортировки.

Это содержимое закрытия сортировки:

$ 0 является одним из объектов, для которых необходимо сравнить, $ 1 является другой. $ 0 [1] и $ 1 [1] доступ 1 индекс объектов, а в данном случае, как это определено в вашем tupule, это ваш пользовательский объект MyClass

Надежда это помогает.

+0

Вы можете сортировать словарь, он возвращает массив кортежей (ключ, значение) –

0

Как уже упоминалось выше, у вас есть словарь, а не кортежи. Однако в словарях действительно есть метод sorted(by:), который можно использовать для сортировки массива пар ключей/значений. Вот пример:

var m: [String: Int] = ["a": 1] 
let n = m.sorted(by: { (first: (key: String, value: Int), second: (key: String, value: Int)) -> Bool in 
    return first.value > second.value 
}) 

Вот расширена, чтобы показать полную подпись закрытия, однако легко обсчитывается на:

let n = m.sorted(by: { 
    return $0.value > $1.value 
}) 

Кроме того, вы можете также выполнять другие перечислений над словарями

m.forEach { (element: (key: String, value: Int)) in 
    print($0.value) 
} 

Все это связано с иерархиями протоколов коллекции и последовательности в Swift, это довольно красивые абстракции.

+0

если вы удалите круглые скобки, вы можете опустить 'by:'. Вы также можете опустить «return» ключевое слово. BTW Он сказал, что хочет сортировать по свойству myString –

+0

В этом случае я хотел, чтобы строки были в алфавитном порядке. –

+0

@LeoDabus Check xcode, словари только имеют 'sorted (by:)', что означает, что вы не можете опускать 'by' при включении в parens, вы можете, однако, использовать синтаксис закрывающего закрытия (хотя стилистически это не предпочтительнее для таких вещей, как сортировка/карта/фильтр) – apocolipse