arrays - 如何将数组的元素移动到数组的开头

我想将索引 2 处的元素移动到数组 [1, 2, 3, 4] 的开头,结果数组应该类似于 [3, 1, 2 , 4]

我的解决方案是执行以下操作

[3] + ([1, 2, 3, 4] - [3])

有更好的方法吗?

最佳答案

一种方法,它从数组中获取前 n 个元素并将它们旋转一个,然后将剩余的元素加回去。

def rotate_first_n_right(arr, n)
  arr[0...n].rotate(-1) + arr[n..-1]
end

rotate_first_n_right([1,2,3,4], 3)
# => [3, 1, 2, 4]

如果我们尝试在太短的数组上使用它,这确实会失败,因为 arr[n..-1] 切片将产生 nil 这将当我们尝试将它添加到第一个数组时会导致错误。

我们可以通过将两个切片扩展到一个列表中来解决这个问题。

def rotate_first_n_right(arr, n)
  [*arr[0...n].rotate(-1), *arr[n..-1]]
end

要了解为什么会这样,举一个非常简单的例子:

[*[1, 2, 3], *nil]
# => [1, 2, 3]

你的例子的一个问题是如果 3 在数组中出现不止一次会发生什么。例如

[1,2,3,3,3,4] - [3]
# => [1, 2, 4]

https://stackoverflow.com/questions/75065681/

相关文章:

python - Pandas 将 df.count() 结果的最后 n 行求和为一行

python - 无法使用调试暂停 python 进程

fortran - Fortran 能否在逻辑运算中强制遵守参数顺序?

perl - Perl 包变量什么时候超出范围?

c - 尝试复制有关可变参数的 printf 行为

c++ - std::variant 使用整数数组中的元素作为 std::variant 中的目标类

haskell - 减少围绕手工包装的 `Num` 类型的样板

python - 根据条件将新数据从另一个 Dataframe 添加到 Dataframe

LUA - 表中最常见的项目

r - 在 mutate 中将参数传递给 pmap