Arrays Swift,如何使用带索引的数组对另一个数组重新排序

Arrays Swift,如何使用带索引的数组对另一个数组重新排序,arrays,swift,indexing,Arrays,Swift,Indexing,在Swift中,我有一个索引数组,我想用它来排列一个值数组(在Matlab中很容易做到),但无法找到一种简单的方法(使用for循环很容易,但我正在寻找一种更有效的方法) 例如: var indices = [1,0,2] var values = ["A","B","C"] var permute = values[indices] // Hoping to print: permute = ["B","A","C"] 您只需将keys数组映射到values数组 var keys = [1,0

在Swift中,我有一个索引数组,我想用它来排列一个值数组(在Matlab中很容易做到),但无法找到一种简单的方法(使用for循环很容易,但我正在寻找一种更有效的方法)

例如:

var indices = [1,0,2]
var values = ["A","B","C"]
var permute = values[indices]
// Hoping to print: permute = ["B","A","C"]

您只需将keys数组映射到values数组

var keys = [1,0,2]
var values = ["a","b","c"]
print(keys.map({values[$0]}))

使用
compactMap
的替代解决方案

let indices = [1, 0, 2]
var values = ["A", "B", "C"]
let permute = indices.compactMap({ values[$0] })
print(permute)

正如我所说的,我试图避免一个for循环。我觉得应该有一个功能或速记方式来实现这一点。这就是我一直在寻找的!我甚至想过使用.map,只是不知道如何正确使用它。:)很高兴这对你有帮助!你为什么要起诉compactMap而不是这里的map?有具体的原因吗?只是另一种解决方案,不管怎么说,这个问题到现在为止都有硬编码的值,以后可能也有零值。好的。我没有看到可选值,这就是为什么我不明白你为什么发布这个。也许用这些信息更新你的答案?谢谢
let indices = [1,0,2]
let values = ["A","B","C"]
var result: [String] = []

indices.forEach({ result.append(values[$0]) })
print(result) //["B", "A", "C"]
let indices = [1, 0, 2]
var values = ["A", "B", "C"]
let permute = indices.compactMap({ values[$0] })
print(permute)