在Swift中,如何基于另一个数组对一个数组进行排序? [英] In Swift how can I sort one array based on another array?
问题描述
在Swift中,说我有两个数组:
In Swift, say I have two arrays:
var array1: [Double] = [1.2, 2.4, 20.0, 10.9, 1.5]
var array2: [Int] = [1, 0, 2, 0, 3]
现在,我想按升序对array1进行排序,并相应地重新索引array2,以便获得
Now, I want to sort array1 in ascending order and reindex array2 accordingly so that I get
array1 = [1.2, 1.5, 2.4, 10.9, 20.4]
array2 = [1, 3, 0, 0, 2]
是否有使用Swift函数或语法执行此操作的简单方法?
Is there a simple way to do this using Swift functions or syntax?
我知道我可以构建一个函数来执行此操作并可以跟踪索引,但是我很好奇是否存在更优雅的解决方案.
I know I can build a function to do it and can keep track of indices, but I'm curious if there is a more elegant solution.
推荐答案
let array1: [Double] = [1.2, 2.4, 20.0, 10.9, 1.5]
let array2: [Int] = [1, 0, 2, 0, 3]
// use zip to combine the two arrays and sort that based on the first
let combined = zip(array1, array2).sorted {$0.0 < $1.0}
print(combined) // "[(1.2, 1), (1.5, 3), (2.4, 0), (10.9, 0), (20.0, 2)]"
// use map to extract the individual arrays
let sorted1 = combined.map {$0.0}
let sorted2 = combined.map {$0.1}
print(sorted1) // "[1.2, 1.5, 2.4, 10.9, 20.0]"
print(sorted2) // "[1, 3, 0, 0, 2]"
将两个以上的数组排序在一起
如果要对3个或更多数组进行排序,则可以sort
其中一个数组及其offset
,使用map
提取offsets
,然后使用map
进行排序其他数组:
If you have 3 or more arrays to sort together, you can sort
one of the arrays along with its offset
s, use map
to extract the offsets
, and then use map
to order the other arrays:
let english = ["three", "five", "four", "one", "two"]
let ints = [3, 5, 4, 1, 2]
let doubles = [3.0, 5.0, 4.0, 1.0, 2.0]
let roman = ["III", "V", "IV", "I", "II"]
// Sort english array in alphabetical order along with its offsets
// and then extract the offsets using map
let offsets = english.enumerated().sorted { $0.element < $1.element }.map { $0.offset }
// Use map on the array of ordered offsets to order the other arrays
let sorted_english = offsets.map { english[$0] }
let sorted_ints = offsets.map { ints[$0] }
let sorted_doubles = offsets.map { doubles[$0] }
let sorted_roman = offsets.map { roman[$0] }
print(sorted_english)
print(sorted_ints)
print(sorted_doubles)
print(sorted_roman)
输出:
["five", "four", "one", "three", "two"]
[5, 4, 1, 3, 2]
[5.0, 4.0, 1.0, 3.0, 2.0]
["V", "IV", "I", "III", "II"]
这篇关于在Swift中,如何基于另一个数组对一个数组进行排序?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!