2016-02-25 2 views
0
let points:[Int] = [200, 1000, 100, 500] 
let people:[String] = ["Harry", "Jerry", "Hannah", "John"] 
let peopleIds:[Int] = [1, 2, 3, 4] 
let sex:[String] = ["Male", "Male", "Female", "Male"] 

Как можно отсортировать этот массив по точкам быть ?:Swift2 - Сортировка нескольких массивов на основе упорядоченных другого массива INT

let points:[Int] = [1000, 500, 200, 100] 
let people:[String] = ["Jerry", "John", "Harry", "Hannah"] 
let peopleIds:[Int] = [2, 4, 1, 3] 
let sex:[String] = ["Male", "Male", "Male", "Female"] 

Это не дубликат How to sort 1 array in Swift/Xcode and reorder multiple other arrays by the same keys changes Я попытался с ответы и не работают

ответ

3

Создайте новый массив индексов, отсортированный так, как вы хотите «спускаться», а затем сопоставляете другие массивы.

var points:[Int] = [200, 1000, 100, 500] 
var people:[String] = ["Harry", "Jerry", "Hannah", "John"] 
var peopleIds:[Int] = [1, 2, 3, 4] 
var sex:[String] = ["Male", "Male", "Female", "Male"] 


//descending order array of indexes 
let sortedOrder = points.enumerate().sort({$0.1>$1.1}).map({$0.0}) 

//Map the arrays based on the new sortedOrder 
points = sortedOrder.map({points[$0]}) 
people = sortedOrder.map({people[$0]}) 
peopleIds = sortedOrder.map({peopleIds[$0]}) 
sex = sortedOrder.map({sex[$0]}) 

Я только что протестировал это решение и хорошо работает.

1

вот решение с вашими собственными данными.

let points:[Int] = [200, 1000, 100, 500] 
let people:[String] = ["Harry", "Jerry", "Hannah", "John"] 
let peopleIds:[Int] = [1, 2, 3, 4] 
let sex:[String] = ["Male", "Male", "Female", "Male"] 

let sortedPointsEnumerateIndexes = points.enumerate().sort { $0.element > $1.element}.map { $0.index } 


var sortedPoints:[Int] = [] 
var sortedPeople:[String] = [] 
var sortedPeopleIds:[Int] = [] 
var sortedSex:[String] = [] 

for i in sortedPointsEnumerateIndexes { 
    sortedPoints.append(points[i]) 
    sortedPeople.append(people[i]) 
    sortedPeopleIds.append(peopleIds[i]) 
    sortedSex.append(sex[i]) 
} 

print(sortedPoints)  // [1000, 500, 200, 100] 
print(sortedPeople)  // ["Jerry", "John", "Harry", "Hannah"] 
print(sortedPeopleIds) // [2, 4, 1, 3] 
print(sortedSex)  // ["Male", "Male", "Male", "Female"] 

// with map 
let sorted2Point = sortedPointsEnumerateIndexes.map{ points[$0] } 
let sorted2People = sortedPointsEnumerateIndexes.map{ people[$0] } 
// .... 

print(sorted2Point)  // [1000, 500, 200, 100] 
print(sorted2People) // ["Jerry", "John", "Harry", "Hannah"] 
Смежные вопросы