.map在下面做什么:

params = (0...param_count).map

当前回答

map方法接受一个可枚举对象和一个block,并为每个元素运行block,输出block中的每个返回值(除非使用map!否则原始对象是不变的):

[1, 2, 3].map { |n| n * n } #=> [1, 4, 9]

Array和Range是可枚举类型。map使用block返回Array。地图!改变原始数组。

这有什么用,和地图有什么区别!和每一个吗?这里有一个例子:

names = ['danil', 'edmund']

# here we map one array to another, convert each element by some rule
names.map! {|name| name.capitalize } # now names contains ['Danil', 'Edmund']

names.each { |name| puts name + ' is a programmer' } # here we just do something with each element

输出:

Danil is a programmer
Edmund is a programmer

其他回答

它将一个函数“映射”到Enumerable中的每个项——在本例中是一个范围。因此,对于从0到param_count的每一个整数,它都会调用传递一次的块(exclusive -关于点,您是对的),并返回一个包含每个返回值的数组。

下面是Enumerable#map的文档。它还有一个别名collect。

0 . .Param_count表示“直到并包括Param_count”。 0…Param_count表示“直到但不包括Param_count”。

Range#map并不返回一个Enumerable,它实际上是将它映射到一个数组。它与Range#to_a相同。

map方法接受一个可枚举对象和一个block,并为每个元素运行block,输出block中的每个返回值(除非使用map!否则原始对象是不变的):

[1, 2, 3].map { |n| n * n } #=> [1, 4, 9]

Array和Range是可枚举类型。map使用block返回Array。地图!改变原始数组。

这有什么用,和地图有什么区别!和每一个吗?这里有一个例子:

names = ['danil', 'edmund']

# here we map one array to another, convert each element by some rule
names.map! {|name| name.capitalize } # now names contains ['Danil', 'Edmund']

names.each { |name| puts name + ' is a programmer' } # here we just do something with each element

输出:

Danil is a programmer
Edmund is a programmer

map,以及select和每一个都是Ruby在我的代码中的一个主力。

它允许您在数组的每个对象上运行一个操作,并将它们全部返回到相同的位置。一个例子是将一个数字数组加1:

[1,2,3].map {|x| x + 1 }
#=> [2,3,4]

如果你可以在数组的元素上运行一个方法,你可以用这样的简写方式来做:

要用上面的例子做到这一点,你必须这样做 类数字 def plusone 自我+ 1 结束 结束 (1、2、3). map (&: plusone) # = >(2、3、4) 为了更简单地使用&快捷技巧,让我们使用一个不同的例子: ["vanessa", "david", "thomas"].map(&:upcase) #=> [" vanessa ", " david ", " thomas "]

在Ruby中转换数据通常涉及一系列映射操作。学习map和select,它们是Ruby主库中最有用的方法。它们都一样重要。

(map也是collect的别名。使用最适合你的概念。)

更多有用信息:

如果你运行each或map的Enumerable对象包含一组Enumerable元素(哈希,数组),你可以在你的块管道中声明这些元素,如下所示:

[["audi", "black", 2008], ["bmw", "red", 2014]].each do |make, color, year|
  puts "make: #{make}, color: #{color}, year: #{year}"
end
# Output:
# make: audi, color: black, year: 2008
# make: bmw, color: red, year: 2014

对于哈希(也是一个Enumerable对象,哈希只是一个元组数组,为解释器提供特殊的指令)。第一个“管道参数”是键,第二个是值。

{:make => "audi", :color => "black", :year => 2008}.each do |k,v|
    puts "#{k} is #{v}"
end
#make is audi
#color is black
#year is 2008

要回答这个实际问题:

假设params是一个散列,这将是通过它进行映射的最佳方法:使用两个块参数而不是一个来捕获散列中每个解释元组的键和值对。

params = {"one" => 1, "two" => 2, "three" => 3}
params.each do |k,v|
  puts "#{k}=#{v}"
end
# one=1
# two=2
# three=3

对于任何需要形象化的人来说:

完整的故事如下:

https://richstone.io/rubys-map-collect-methods-explained-visually/