私はプログラミングに不慣れです。誰かが何をするか説明できますか.map
:
params = (0...param_count).map
このmap
メソッドは、列挙可能なオブジェクトとブロックを受け取り、要素ごとにブロックを実行して、ブロックから返された各値を出力します(元のオブジェクトは、次を使用しない限り変更されませんmap!)
。
[1, 2, 3].map { |n| n * n } #=> [1, 4, 9]
Array
とRange
は列挙可能なタイプです。map
ブロックを指定すると、配列が返されます。 map!
元の配列を変更します。
map!
これはどこで役立ちますか、ととの違いは何each
ですか?次に例を示します。
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
、each
私のコードでRubyの主力製品の1つです。
これにより、配列の各オブジェクトに対して操作を実行し、それらをすべて同じ場所に返すことができます。例として、数値の配列を1つインクリメントします。
[1,2,3].map {|x| x + 1 }
#=> [2,3,4]
配列の要素に対して単一のメソッドを実行できる場合は、次のような省略形で実行できます。
上記の例でこれを行うには、次のようなことを行う必要があります
class Numeric
def plusone
self + 1
end
end
[1,2,3].map(&:plusone)
#=> [2,3,4]
アンパサンドショートカットの手法をより簡単に使用するために、別の例を使用してみましょう。
["vanessa", "david", "thomas"].map(&:upcase)
#=> ["VANESSA", "DAVID", "THOMAS"]
Rubyでデータを変換するには、多くの場合、一連のmap
操作が必要です。Study map
&select
、これらはプライマリライブラリで最も便利なRubyメソッドの一部です。それらはと同じくらい重要ですeach
。
(map
の別名でもありcollect
ます。概念的に最も効果的なものを使用してください。)
さらに役立つ情報:
実行中または実行中のEnumerableオブジェクトに一連のEnumerable要素(ハッシュ、配列)が含まれている場合は、次のようにブロックパイプ内でこれらの各要素を宣言できます。each
map
[["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
オブジェクトであり、ハッシュは単にタプルの配列であり、通訳者向けの特別な指示があります)。最初の「パイプパラメータ」はキーで、2番目は値です。
{: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
、これはそれをマッピングするための最良の方法です。ハッシュ内の解釈されたタプルごとにキーと値のペアをキャプチャするために、1つではなく2つのブロックパラメーターを使用します。
params = {"one" => 1, "two" => 2, "three" => 3}
params.each do |k,v|
puts "#{k}=#{v}"
end
# one=1
# two=2
# three=3
transform_values
ruby 2.4を使用すると、レールからRubyに抽出されたこの機能を使用して同じことを行うことができます。
h = {a: 1, b: 2, c: 3}
h.transform_values { |v| v * 10 }
#=> {a: 10, b: 20, c: 30}
0..param_count
「param_countまで」を意味します。
0...param_count
「最大、ただしparam_countを含まない」を意味します。
Range#map
を返しませんEnumerable
。実際には配列にマップします。と同じRange#to_a
です。
Enumerable
関数を-この場合は範囲内の各項目に「マップ」します。したがって、0からparam_count
(排他的-ドットについては正しい)までの整数ごとに1回渡されるブロックを呼び出し、各戻り値を含む配列を返します。
これがのドキュメントですEnumerable#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}
マップは、ブロックパラメータによって返される配列を反復処理する値を提供します。
#each
#each
配列内の要素ごとに関数を実行します。次の2つのコードの抜粋は同等です。
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!
#map!
に似#map
ていますが、アレイを所定の位置に変更します。以下は同等です。
array = ["zero", "one", "two"]
array.map!{|element| element.capitalize()}
array = ["zero", "one", "two"]
array = array.map{|element| element.capitalize()}