And*_*Kim 3 ruby arrays enumerable
我对Ruby Enumerable模块非常熟悉,或者至少我认为.请使用以下代码段:
names = [ "Donald", "Daisy", "Daffy" ]
new_empty_array = []
new_names_array = names.map do |name|
new_empty_array << name
end
puts new_names_array.inspect
# prints [["Donald", "Daisy", "Daffy"], ["Donald", "Daisy", "Daffy"], ["Donald", "Daisy", "Daffy"]]
Run Code Online (Sandbox Code Playgroud)
我知道我没有map正确使用,但是我正在教授关于Ruby enumerables的课程,并在学生测试时遇到了这个例子map.铲除(<<)运算符的返回值是添加元素后的数组.结果不应该是:
[["Donald"], ["Donald", "Daisy"], ["Donald", "Daisy", "Daffy"]]
Run Code Online (Sandbox Code Playgroud)
似乎整个循环过程和铲运算符的最终返回值都被处理了?是什么赋予了?
结果map,你的情况,是由以相同的数组引用数组new_empty_array多次.您不是在创建三个不同的数组,而是在map块中修改相同的数组.
要获得您期望的输出,您需要执行以下操作:
new_names_array = first_names.map do |name|
(new_empty_array << name).dup
end
Run Code Online (Sandbox Code Playgroud)
作为旁注,您可以使用此代码(这比上面的代码更明显)用于您想要的输出:
(1..first_names.size).map do |num|
first_names.take(num)
end
#=> [["Donald"], ["Donald", "Daisy"], ["Donald", "Daisy", "Daffy"]]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |