元素替换 - Ruby
Element Replace - Ruby
我正在尝试创建一个新数组,其中原始数组的元素被替换为它们在散列中的对应值。我想将 arr 中的每个元素与哈希中的键进行比较,如果它们相等,则将它们铲入 arr 并在最后 return 。为什么我的代码不起作用,我如何 access/return 散列中各个条目的键值,而不仅仅是键指向的值?如果你明白我在说什么。
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
Ruby 的 Hash::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"]
您可以 map 数组来散列键或保留数组元素本身:如果缺少键 (return nil
) 保留数组元素:
arr1.map { |k| hash1[k] || k }
#=> ["basketball", "Lionel Messi", "tennis"]
如果默认情况下您的散列应该 return 密钥,您可以使用 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"]
def element_replace(arr, hash)
new_arr = []
arr.each { |n|
if hash.has_key?(n)
new_arr << hash[n]
else
new_arr << n
end
}
return new_arr
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
我正在尝试创建一个新数组,其中原始数组的元素被替换为它们在散列中的对应值。我想将 arr 中的每个元素与哈希中的键进行比较,如果它们相等,则将它们铲入 arr 并在最后 return 。为什么我的代码不起作用,我如何 access/return 散列中各个条目的键值,而不仅仅是键指向的值?如果你明白我在说什么。
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
Ruby 的 Hash::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"]
您可以 map 数组来散列键或保留数组元素本身:如果缺少键 (return nil
) 保留数组元素:
arr1.map { |k| hash1[k] || k }
#=> ["basketball", "Lionel Messi", "tennis"]
如果默认情况下您的散列应该 return 密钥,您可以使用 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"]
def element_replace(arr, hash)
new_arr = []
arr.each { |n|
if hash.has_key?(n)
new_arr << hash[n]
else
new_arr << n
end
}
return new_arr
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