IT story

"map"메소드는 Ruby에서 무엇을합니까?

hot-time 2020. 4. 10. 08:22
반응형

"map"메소드는 Ruby에서 무엇을합니까?


나는 프로그래밍을 처음 사용합니다. 누군가가 할 일 .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내 코드에서 루비의 일꾼 중 하나입니다.

각 배열의 객체에 대해 작업을 실행하고 모두 같은 위치에 반환 할 수 있습니다. 예를 들어 숫자 배열을 1 씩 증가시키는 것이 있습니다.

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

배열의 요소에서 단일 메소드를 실행할 수 있다면 다음과 같이 속기 스타일로 수행 할 수 있습니다.

  1. 위의 예를 사용 하여이 작업을 수행하려면 다음과 같이해야합니다

    class Numeric
      def plusone
        self + 1
      end
    end
    [1,2,3].map(&:plusone)
    #=> [2,3,4]
    
  2. 더 간단하게 앰퍼샌드 기법을 사용하려면 다른 예를 사용하십시오.

    ["vanessa", "david", "thomas"].map(&:upcase)
    #=> ["VANESSA", "DAVID", "THOMAS"]
    

루비에서 데이터를 변환하려면 일련의 map작업이 필요합니다. Study map& select는 기본 라이브러리에서 가장 유용한 Ruby 메소드 중 일부입니다. 그들은만큼 중요합니다 each.

( map의 별칭이기도합니다 collect. 개념적으로 가장 적합한 것을 사용하십시오.)

더 유용한 정보 :

는 IF Enumerable에서 실행중인 객체 eachmap에 열거 할 요소 (해시, 배열)의 세트가 포함 된 블록 파이프가 너무 좋아 내에서, 당신은 그 각 요소를 선언 할 수 있습니다 :

[["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

루비 2.4를 사용하면 transform_values레일에서 루비로 추출 된이 기능을 사용하여 동일한 작업을 수행 할 수 있습니다 .

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에서 0까지의 모든 정수에 대해 한 번 전달 된 블록을 호출하고 param_count(독점-점에 대해 맞습니다) 각 반환 값을 포함하는 배열을 반환합니다.

에 대한 설명서는 다음과 같습니다 Enumerable#map. 또한 별칭이 collect있습니다.


맵은 열거 가능한 모듈의 일부입니다. "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}

맵은 블록 매개 변수에 의해 리턴되는 배열을 반복하는 값을 제공합니다.

참고 URL : https://stackoverflow.com/questions/12084507/what-does-the-map-method-do-in-ruby

반응형