반응형
두 배열을 해시로 결합
두 개의 배열이 있습니다.
members = ["Matt Anderson", "Justin Biltonen", "Jordan Luff", "Jeremy London"]
instruments = ["guitar, vocals", "guitar", "bass", "drums"]
내가하고 싶은 것은 결과 데이터 구조가 다음과 같은 해시가되도록 결합하는 것입니다.
{"Matt Anderson"=>["guitar", "vocals"], "Justin Biltonen"=>"guitar", "Jordan Luff"=>"bass", "Jeremy London"=>"drums"}
"Matt Anderson"의 값은 이제 문자열 대신 배열입니다. 루비 마법사가이 기회를 주려고하나요?
나는 거의 내가 원하는 방식으로 Hash[*members.zip(instruments).flatten]
그것들을 결합 한다는 것을 알고있다 . 그러나 먼저 "기타, 보컬"문자열을 배열로 바꾸는 것은 어떨까? 감사.
사용 map
하고 split
배열로 악기 문자열을 변환 :
instruments.map {|i| i.include?(',') ? (i.split /, /) : i}
그리고 사용 Hash[]
과 zip
결합 members
하여 instruments
:
Hash[members.zip(instruments.map {|i| i.include?(',') ? (i.split /, /) : i})]
얻기 위해
{"Jeremy London"=>"drums",
"Matt Anderson"=>["guitar", "vocals"],
"Jordan Luff"=>"bass",
"Justin Biltonen"=>"guitar"}
단일 항목 목록도 배열인지 상관하지 않는 경우 다음과 같은 간단한 솔루션을 사용할 수 있습니다.
Hash[members.zip(instruments.map {|i| i.split /, /})]
이것은 당신에게 이것을 준다 :
{"Jeremy London"=>["drums"],
"Matt Anderson"=>["guitar", "vocals"],
"Jordan Luff"=>["bass"],
"Justin Biltonen"=>["guitar"]}
Rafe Kettler가 게시했듯이 zip을 사용하는 것이 좋습니다.
Hash[members.zip(instruments)]
예 01
k = ['a', 'b', 'c']
v = ['aa', 'bb']
h = {}
k.zip(v) { |a,b| h[a.to_sym] = b }
# => nil
p h
# => {:a=>"aa", :b=>"bb", :c=>nil}
예제 02
k = ['a', 'b', 'c']
v = ['aa', 'bb', ['aaa','bbb']]
h = {}
k.zip(v) { |a,b| h[a.to_sym] = b }
p h
# => {:a=>"aa", :b=>"bb", :c=>["aaa", "bbb"]}
이것은 당신이 원하는 것을 할 수있는 가장 좋고 깨끗한 방법입니다.
Hash[members.zip(instruments.map{|i| i.include?(',') ? i.split(',') : i})]
즐겨!
h = {}
members.each_with_index do |el,ix|
h[el] = instruments[ix].include?(",") ? instruments[ix].split(",").to_a : instruments[ix]
end
h
members.inject({}) { |m, e| t = instruments.delete_at(0).split(','); m[e] = t.size > 1 ? t : t[0]; m }
결과에서 요소가 1 개인 배열에 관심이 없다면 다음을 사용할 수 있습니다.
members.inject({}) { |m, e| m[e] = instruments.delete_at(0).split(','); m }
h = {}
members.each_with_index {|item, index|
h.store(item,instruments[index].split)
}
참조 URL : https://stackoverflow.com/questions/5174913/combine-two-arrays-into-hash
반응형
'programing' 카테고리의 다른 글
nib / storyboard의 UITextView에서 새 줄을 만드는 방법은 무엇입니까? (0) | 2021.01.05 |
---|---|
.NET 코드가 Visual Studio 디자이너에서 실행 중인지 확인하는 방법 (0) | 2021.01.05 |
TextInputLayout은 EditText에서 프로그래밍 방식으로 힌트를 제공하는 데 효과가 없습니다. (0) | 2021.01.05 |
iOS 10의 푸시 알림 문제 (0) | 2021.01.05 |
프로그래밍 방식으로 창을 최소화하는 방법이 있습니까? (0) | 2021.01.05 |