我需要根據它的一個元素對我的陣列進行排序,參考元素可能會有所不同。例如,我希望 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]
uj5u.com熱心網友回復:
如果我理解正確,您想旋轉陣列。
array
# [1, 2, 3, 4, 5, 6]
array.rotate(2) # or array.rotate(array.index(3))
# [3, 4, 5, 6, 1, 2]
https://apidock.com/ruby/v2_5_5/Array/rotate
uj5u.com熱心網友回復:
絕對#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這將永遠運行。您可以實施某種檢查以確保不會發生這種情況,但這只是您實際上不應該將其作為學習練習之外的任何其他事情的原因之一。
一種方法是找到elemin的索引arr并多次移動/推送。在這種&.情況下,操作員可能有助于處理無法找到的elem可能性arr。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/440711.html
上一篇:rubyonrailspostgresql活動記錄并行更新
下一篇:引數的rspec測驗失敗
