我想使用 Array.partition(by:)
将一些预定义元素从数组移动到数组末尾。
例子:
var my_array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
let elementsToMove = [1, 3, 4, 5, 8]
// desired result: [0, 2, 6, 7, 9, ...remaining items in any order...]
有没有一种优雅的方式来做到这一点?观察 elementsToMove
不遵循某种模式。
最佳答案
partition(by:)
不保留元素的顺序:
var my_array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
let elementsToMove = [1, 3, 4, 5, 8]
_ = my_array.partition(by: { elementsToMove.contains($0) } )
print(my_array) // [0, 9, 2, 7, 6, 5, 4, 3, 8, 1]
一个简单的解决方案是过滤掉并附加来自 第二个数组:
let my_array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
let elementsToMove = [1, 3, 4, 5, 8]
let newArray = my_array.filter({ !elementsToMove.contains($0) }) + elementsToMove
print(newArray) // [0, 2, 6, 7, 9, 1, 3, 4, 5, 8]
对于较大的数组,创建一个集合可能是有利的 首先要移动的元素:
let my_array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
let elementsToMove = [1, 3, 4, 5, 8]
let setToMove = Set(elementsToMove)
let newArray = my_array.filter({ !setToMove.contains($0) }) + elementsToMove
print(newArray) // [0, 2, 6, 7, 9, 1, 3, 4, 5, 8]
关于swift - 在 Swift 中使用分区将一些预定义的元素移动到数组的末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51728469/