"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]
배열의 요소에서 단일 메소드를 실행할 수 있다면 다음과 같이 속기 스타일로 수행 할 수 있습니다.
위의 예를 사용 하여이 작업을 수행하려면 다음과 같이해야합니다
class Numeric def plusone self + 1 end end [1,2,3].map(&:plusone) #=> [2,3,4]
더 간단하게 앰퍼샌드 기법을 사용하려면 다른 예를 사용하십시오.
["vanessa", "david", "thomas"].map(&:upcase) #=> ["VANESSA", "DAVID", "THOMAS"]
루비에서 데이터를 변환하려면 일련의 map
작업이 필요합니다. Study map
& select
는 기본 라이브러리에서 가장 유용한 Ruby 메소드 중 일부입니다. 그들은만큼 중요합니다 each
.
( map
의 별칭이기도합니다 collect
. 개념적으로 가장 적합한 것을 사용하십시오.)
더 유용한 정보 :
는 IF 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
개체 도 해시는 통역사를위한 특별 지침이있는 튜플의 배열입니다). 첫 번째 "파이프 매개 변수"가 키이고 두 번째는 값입니다.
{: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
'IT story' 카테고리의 다른 글
파이썬 : 조건에 따라 목록을 나누시겠습니까? (0) | 2020.04.10 |
---|---|
크로스 브라우저 창 크기 조정 이벤트-JavaScript / jQuery (0) | 2020.04.10 |
Visual Studio에서 단일 스레드를 디버깅하는 방법은 무엇입니까? (0) | 2020.04.10 |
작은 따옴표와 큰 따옴표 ( 'vs ") (0) | 2020.04.10 |
iOS 시뮬레이터를 시작할 때 Bluetooth 헤드폰 음악 품질이 저하됩니다 (0) | 2020.04.10 |