2015-02-10 2 views
0

У меня есть два массива того же размера, и я сортирую второй. Как я могу сопоставить первый из них?Сортировка массива на основе другого сортированного массива

Базовый пример (представьте себе замену Ints с Strings):

var array1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0] 

var array2 = [5, 2, 3, 4, 5, 6, 8, 5, 4, 5, 1] 

array2.sort = ({ $0 > $1}) 

Результат:

array2 is now [8, 6, 5, 5, 5, 5, 4, 4, 3, 2, 1] 

Как сортировать значение индекса Array1, совпадающее array2?

array1 should now be [6, 5, 0, 4, 7, 9, 3, 8, 2, 1, 0] 
+3

Я хотел бы сказать, сделать один массив объектов и сортировки объекта ... –

ответ

4

Zip2, sorted и map

array1 = map(sorted(Zip2(array1, array2), {$0.1 > $1.1}), { $0.0 }) 

Объединения filter

var array1 = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"] 
var array2 = [5, 2, 3, 4, 5, 6, 8, 5, 4, 5, 1] 

func isEven(x:Int) -> Bool { 
    return x % 2 == 0 
} 

let result = map(sorted(filter(Zip2(array1, array2), { isEven($0.1) }), {$0.1 > $1.1}), { $0.0 }) 
// -> ["6", "5", "3", "8", "1"] 

Как вы можете видеть, линия является слишком сложной, вы можете синтаксис цепи Array метода :

let result2 = Array(Zip2(array1, array2)) 
    .filter({ isEven($0.1) }) 
    .sorted({ $0.1 > $1.1 }) 
    .map({ $0.0 }) 

Во всяком случае, если ваш array2 является [PFObject], вы можете реализовать функцию что-то вроде:

func isOpen(restaurant: PFObject, forTime time: String, onDay day: Int) -> Bool { 

    // return `true` if the restaurant is open, `false` otherwise 

} 
+0

ли эта работа для функций слишком ? Если я вызову функцию для array2 'filterAreOpen (detailsForFoodPhotos, forTime: time.time, onDay: time.dayOfWeek)' и map array1 так же? – Onichan

+0

Будет ли он выглядеть примерно так: 'map (filterAreOpen (detailsForFoodPhotos, forTime: time.time, onDay: time.dayOfWeek), {$ 0.0})' – Onichan

+1

Что такое 'filterAreOpen', возможно [this] (http: // stackoverflow .com/а/27879386/3804019)? Если это так, я не думаю, что это сработает. Я добавлю основной пример, объединяющий 'filter'. – rintaro

Смежные вопросы