2012-02-28 2 views
1

가능한 중복 : 닷넷의 ToDictionary 유사한 해시 배열을 (변환하는 쉬운 방법을 찾을 때 나는 다음과 같은 코드를 가로 질러
What is the * operator doing to this string in Ruby루비의 단항 * 연산자

메서드를 IEnumerable ... 나는 임의로 키와 값을 설정할 수 있기를 원했습니다.)

a = [ 1, 2, 3, 4, 5, 6 ] 
h = Hash[ *a.collect { |v| [ v, v ] }.flatten ] 

제 질문은 a.collect 이전의 별표는 무엇입니까? 그런데

이 코드는 당신이 그것을 구글하려는 경우 그것은 플랫 - 운영자의 http://justatheory.com/computers/programming/ruby/array_to_hash_one_liner.html

+0

아, 아직 발견되지 않았습니다. 별표 (*)는 Google과 SO가 검색에서 제외하기 때문에 검색하기가 까다 롭습니다. –

+0

글쎄, 지금은 "스 플랫 (splat)"이라고 알고 있습니다. :-) –

+0

도움 주셔서 감사합니다. @ JoshLee. –

답변

4

에서 온다. 배열을 목록으로 변환합니다 (따라서 배열을 메서드의 인수로 사용할 수 있습니다). 그것은 또한 반대를 수행합니다 : 그것은리스트를 배열로 'slurp'할 수 있습니다.

require 'date' 
*date_stuff = 2012,2,29 # slurp 
p date_stuff #=> [2012, 2, 29] 
Date.new(*date_stuff) # regurgitate 
+0

반대의 행동에 대한 보너스 정보를 제공해 주셔서 감사합니다. –

+0

은 일반적인 프로그래밍에서 튜플이라고 불리는'a, b = * [: one, : two] '가 아닙니다. – farnoy

+0

@fanoy - 일반 프로그래밍의 튜플에 대해서는 알지 못합니다. 코드가 작동합니다. 그것은 심지어 splat (그것은 다소 이상한)없이 작동한다. – steenslag