我正在嘗試創建一個新陣列,其中原始陣列的元素被替換為哈希中的相應值。我想將 arr 中的每個元素與 hash 中的鍵進行比較,如果它們相等,則將它們鏟入 arr 并在最后回傳。為什么我的代碼不起作用,我如何訪問/回傳哈希中相應條目的鍵值,而不僅僅是鍵指向的值?如果你明白我在說什么。
def element_replace(arr, hash)
count = []
for i in arr do
if i == hash.key
count << value
else
count << i
end
end
return count
end
arr1 = ["LeBron James", "Lionel Messi", "Serena Williams"]
hash1 = {"Serena Williams"=>"tennis", "LeBron James"=>"basketball"}
print element_replace(arr1, hash1) # => ["basketball", "Lionel Messi", "tennis"]
puts
arr2 = ["dog", "cat", "mouse"]
hash2 = {"dog"=>"bork", "cat"=>"meow", "duck"=>"quack"}
print element_replace(arr2, hash2) # => ["bork", "meow", "mouse"]
puts
uj5u.com熱心網友回復:
RubyHash::fetch將是一種獲得所需結果的技術:
> players = ["LeBron James", "Lionel Messi", "Serena Williams"]
=> ["LeBron James", "Lionel Messi", "Serena Williams"]
> sports_data = {"Serena Williams"=>"tennis", "LeBron James"=>"basketball"}
=> {"Serena Williams"=>"tennis", "LeBron James"=>"basketball"}
> players.map { |player| sports_data.fetch(player, player) }
=> ["basketball", "Lionel Messi", "tennis"]
uj5u.com熱心網友回復:
您可以將陣列映射到哈希鍵或保留陣列元素本身:如果缺少鍵(回傳nil),則保留陣列元素:
arr1.map { |k| hash1[k] || k }
#=> ["basketball", "Lionel Messi", "tennis"]
uj5u.com熱心網友回復:
如果您的散列默認情況下應該回傳密鑰,您可以使用default_proc:
hash = { 'Serena Williams' => 'tennis', 'LeBron James' => 'basketball' }
hash.default_proc = proc { |hash, key| key }
這給了你:
hash['LeBron James'] #=> "basketball" # explicit value
hash['Lionel Messi'] #=> "Lionel Messi" # default value
或者,使用陣列:
arr = ['LeBron James', 'Lionel Messi', 'Serena Williams']
hash.values_at(*arr)
#=> ["basketball", "Lionel Messi", "tennis"]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/387977.html
