根据此数组中的元素对数组进行排序
Sorting an array according to an element inside this array
我需要根据其中的一个元素对我的数组进行排序,参考元素可能会有所不同。
例如,我希望 3 成为数组的第一个元素,而 1、2 放在末尾。
- 数组=[1,2,3,4,5,6]
- new_array = [3, 4, 5, 6, 1, 2]
元素可能会有所不同。如果我从 5 开始,行为必须相同:前面的元素放在末尾,所以我将有 :
- new_array = [5, 6, 1, 2, 3, 4]
如果我没理解错的话,你想旋转数组。
array
# [1, 2, 3, 4, 5, 6]
array.rotate(2) # or array.rotate(array.index(3))
# [3, 4, 5, 6, 1, 2]
在实际使用中肯定使用#rotate
,但作为替代方案,您可以执行类似#shift
和#push
的操作,直到所需元素位于数组的开头.
def rotate(arr, elem)
arr2 = arr.clone
arr2.push(arr2.shift) until arr2.first == elem
arr2
end
irb(main):026:0> arr = [1, 2, 3, 4, 5, 6]
=> [1, 2, 3, 4, 5, 6]
irb(main):027:0> rotate(arr, 3)
=> [3, 4, 5, 6, 1, 2]
irb(main):028:0> arr
=> [1, 2, 3, 4, 5, 6]
显然,如果 elem
在 arr
中 而不是 ,这将永远 运行。您可以实施某种检查以确保不会发生这种情况,但这只是您实际上不应该将此作为学习练习以外的任何事情的原因之一。
一种方法是在 arr
和 shift/push 中多次找到 elem
的索引。 &.
运算符在这种情况下可能有用,可以处理在 arr
.
中找不到 elem
的可能性
我需要根据其中的一个元素对我的数组进行排序,参考元素可能会有所不同。 例如,我希望 3 成为数组的第一个元素,而 1、2 放在末尾。
- 数组=[1,2,3,4,5,6]
- new_array = [3, 4, 5, 6, 1, 2]
元素可能会有所不同。如果我从 5 开始,行为必须相同:前面的元素放在末尾,所以我将有 :
- new_array = [5, 6, 1, 2, 3, 4]
如果我没理解错的话,你想旋转数组。
array
# [1, 2, 3, 4, 5, 6]
array.rotate(2) # or array.rotate(array.index(3))
# [3, 4, 5, 6, 1, 2]
在实际使用中肯定使用#rotate
,但作为替代方案,您可以执行类似#shift
和#push
的操作,直到所需元素位于数组的开头.
def rotate(arr, elem)
arr2 = arr.clone
arr2.push(arr2.shift) until arr2.first == elem
arr2
end
irb(main):026:0> arr = [1, 2, 3, 4, 5, 6]
=> [1, 2, 3, 4, 5, 6]
irb(main):027:0> rotate(arr, 3)
=> [3, 4, 5, 6, 1, 2]
irb(main):028:0> arr
=> [1, 2, 3, 4, 5, 6]
显然,如果 elem
在 arr
中 而不是 ,这将永远 运行。您可以实施某种检查以确保不会发生这种情况,但这只是您实际上不应该将此作为学习练习以外的任何事情的原因之一。
一种方法是在 arr
和 shift/push 中多次找到 elem
的索引。 &.
运算符在这种情况下可能有用,可以处理在 arr
.
elem
的可能性