第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在Ruby中復(fù)制哈希?

如何在Ruby中復(fù)制哈希?

紅糖糍粑 2019-12-25 15:09:46
我承認(rèn)我是一個紅寶石新手(現(xiàn)在正在編寫rake腳本)。在大多數(shù)語言中,復(fù)制構(gòu)造函數(shù)很容易找到。半小時的搜索未在紅寶石中找到它。我想創(chuàng)建哈希的副本,以便可以修改它而不影響原始實例。一些預(yù)期的方法無法按預(yù)期工作:h0 = {  "John"=>"Adams","Thomas"=>"Jefferson","Johny"=>"Appleseed"}h1=Hash.new(h0)h2=h1.to_hash同時,我采取了這種優(yōu)雅的解決方法def copyhash(inputhash)  h = Hash.new  inputhash.each do |pair|    h.store(pair[0], pair[1])  end  return hend
查看完整描述

3 回答

?
倚天杖

TA貢獻(xiàn)1828條經(jīng)驗 獲得超3個贊

該clone方法是Ruby的標(biāo)準(zhǔn)淺層復(fù)制內(nèi)置方法:


irb(main):003:0> h0 = {"John" => "Adams", "Thomas" => "Jefferson"}

=> {"John"=>"Adams", "Thomas"=>"Jefferson"}

irb(main):004:0> h1 = h0.clone

=> {"John"=>"Adams", "Thomas"=>"Jefferson"}

irb(main):005:0> h1["John"] = "Smith"

=> "Smith"

irb(main):006:0> h1

=> {"John"=>"Smith", "Thomas"=>"Jefferson"}

irb(main):007:0> h0

=> {"John"=>"Adams", "Thomas"=>"Jefferson"}

請注意,該行為可能會被覆蓋:


此方法可能具有特定于類的行為。如果是這樣,則將#initialize_copy在該類的方法下記錄該行為。


查看完整回答
反對 回復(fù) 2019-12-25
?
富國滬深

TA貢獻(xiàn)1790條經(jīng)驗 獲得超9個贊

正如其他人指出的那樣,clone會做到的。請注意,clone哈希會產(chǎn)生淺表副本。也就是說:


h1 = {:a => 'foo'} 

h2 = h1.clone

h1[:a] << 'bar'

p h2                # => {:a=>"foobar"}

發(fā)生的事情是哈希的引用被復(fù)制,而不是引用所引用的對象。


如果要深拷貝,請執(zhí)行以下操作:


def deep_copy(o)

  Marshal.load(Marshal.dump(o))

end


h1 = {:a => 'foo'}

h2 = deep_copy(h1)

h1[:a] << 'bar'

p h2                # => {:a=>"foo"}

deep_copy適用于任何可編組的對象。大多數(shù)內(nèi)置數(shù)據(jù)類型(數(shù)組,哈希,字符串等)都可以編組。


編組是Ruby的序列化名稱。通過編組,對象及其引用的對象將轉(zhuǎn)換為一系列字節(jié);這些字節(jié)然后用于創(chuàng)建另一個對象,例如原始對象。


查看完整回答
反對 回復(fù) 2019-12-25
?
婷婷同學(xué)_

TA貢獻(xiàn)1844條經(jīng)驗 獲得超8個贊

哈??梢詮默F(xiàn)有哈希創(chuàng)建新哈希:


irb(main):009:0> h1 = {1 => 2}

=> {1=>2}

irb(main):010:0> h2 = Hash[h1]

=> {1=>2}

irb(main):011:0> h1.object_id

=> 2150233660

irb(main):012:0> h2.object_id

=> 2150205060


查看完整回答
反對 回復(fù) 2019-12-25
  • 3 回答
  • 0 關(guān)注
  • 923 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號