this tutorial中的练习之一是:
利用map
总是返回一个数组的事实:编写一个方法hash_keys
,该方法接受一个散列并映射到散列上,以返回线性Array
中的所有键。
解决办法是:
def hash_keys(hash)
hash.map { |pair| pair.first }
end
然而,我很难理解为什么上面的工作。例如,我编写了一个解决方案,如下所示:
def hash_keys(hash)
# Initialize a new array
result = Array.new
# Cycle through each element of the hash and push each key on to our array
hash.map { |x,y| result.push(x) }
# Return the array
result
end
我能理解我的方法为什么有效,但我不理解他们提出的解决方案。例如,他们甚至没有创建数组对象。他们什么都不还。它们似乎只是列出每个键/值元素数组中的第一个元素。
最佳答案
我想你误解了map
的意思。它不仅仅迭代给定的集合(这就是each
的作用),它还创建一个数组,其中每个元素都是使用原始集合的相应元素调用块的结果。
您的解决方案也可以(而且应该)使用each
而不是map
来编写,因为您并没有真正利用map
的功能—您只是利用了这样一个事实,即它为给定集合中的每个元素调用其块一次。
关于ruby - Hash.map方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16281983/