swift - 在 Swift 中使用分区将一些预定义的元素移动到数组的末尾

标签 swift dynamic-programming partition

我想使用 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/

相关文章:

algorithm - 具有两个权重的背包算法

hadoop - Hadoop-2.4.1自定义分区程序以平衡 reducer

ios - 核心数据并发调试

ios - UserDefaults 可以在每次 .synchronize() 之后继续保存新数据吗?

algorithm - DP 左上角与右下角表格填充。什么时候使用哪个?

windows-10 - 如何在Windows 10中将分区完全备份到Microsoft OneDrive?

python - 在每个列表项中的字符之后删除所有列表项中的文本 Python

swift - 如何在展开时保持 UICollectionviewcell 高度?

swift - 函数粘贴(itemProviders : [NSItemProvider]) {

algorithm - 具有记忆化的动态编程比蛮力方法花费的时间更长