我正在嘗試將一個陣列傳遞給一個方法。這個想法是生成一個亂數,i,并將 的值xArray[i]復制到yArray[x],其中x = 0隨著每次運行而增加。
我不明白的是我傳遞給方法的陣列也被修改了。例如:
# inputArray is populated by the capital letters of the alphabet, e.g. "A", "B", ... "Z"
def populateArray inputArray
xArray = inputArray
yArray = Array.new
i = 0
while yArray.length < 26
# Subtract i to take into account decreasing array size
x = rand(26-i)
yArray[i] = xArray[x]
# Delete entry so I don't get duplicate letters
xArray.delete_at(x)
i = i 1
end
end
puts "inputArray length: #{inputArray.length.to_s}"
puts "xArray length: #{xArray.length.to_s}"
puts "yArray length: #{yArray.length.to_s}"
我能理解為什么 xArray.length 是 0,因為我已經從中洗掉了條目。但為什么它也會影響 inputArray?
我嘗試通過這樣做來創建一個副本:xArray = inputArray,但它似乎沒有什么不同。
我希望 inputArray 保持其長度,并保持內部值不變。
注意: 我是 Ruby 的新手,只介紹了 Ruby 網站上推薦的“學習編程”部分。任何關于格式化和更簡單的做事方式的建議總是受歡迎的。
uj5u.com熱心網友回復:
在您使用的代碼中xArray = inputArray,它不會創建新陣列。它定義了一個指向與 相同的陣列的新變數inputArray。所以沒有兩個陣列,只有一個陣列被兩個變數參考。
因此,xArray.delete_at(x)不是從副本中洗掉元素,而是從原始陣列中洗掉元素。
如果你真的想復制陣列,你需要使用.dup(參見https://apidock.com/ruby/Object/dup中的方法檔案)。xArray = inputArray.dup將按照您描述的方式作業,并且inputArray無論何時從中洗掉元素都不會更新xArray。
uj5u.com熱心網友回復:
有淺拷貝和深拷貝的概念。你在這里做淺拷貝。在淺拷貝中,只有原始副本的參考地址副本。在深拷貝中,原始副本和重復副本都存盤。
你應該試試這個:
xArray = inputArray.dup
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/534547.html
標籤:数组红宝石方法重复复制
