.map在下面做什么:

params = (0...param_count).map

当前回答

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

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

其他回答

它将一个函数“映射”到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是可枚举模块的一部分。和“collect”非常相似。

  Class Car

    attr_accessor :name, :model, :year

    Def initialize (make, model, year)
      @make, @model, @year = make, model, year
    end

  end

  list = []
  list << Car.new("Honda", "Accord", 2016)
  list << Car.new("Toyota", "Camry", 2015)
  list << Car.new("Nissan", "Altima", 2014)

  p list.map {|p| p.model}

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

#每一个

#each为数组中的每个元素运行一个函数。以下两个代码摘录是等价的:

x = 10
["zero", "one", "two"].each{|element|
    x++
    puts element
}
x = 10
array = ["zero", "one", "two"]

for i in 0..2
    x++
    puts array[i]
end

#map

#map对数组的每个元素应用一个函数,返回结果数组。以下是等价的:

array = ["zero", "one", "two"]
newArray = array.map{|element| element.capitalize()}
array = ["zero", "one", "two"]

newArray = []
array.each{|element|
    newArray << element.capitalize()
}

#地图!

#地图!类似于#map,但在适当的位置修改数组。以下是等价的:

array = ["zero", "one", "two"]
array.map!{|element| element.capitalize()}
array = ["zero", "one", "two"]
array = array.map{|element| element.capitalize()}