Ruby에서 <<로 해시에 키 / 값 쌍 추가
Ruby에서는 << :를 사용하여 기존 배열에 값을 추가 할 수 있습니다.
a = []
a << "foo"
하지만 기존 해시에 키 / 값 쌍을 추가 할 수도 있습니까?
h = {}
h << :key "bar"
나는 당신이 할 수 있다는 것을 압니다.
h[:key] = ""
h[:key] << "bar"
그러나 그것은 내가 원하는 것이 아닙니다.
감사.
있습니다 merge!
.
h = {}
h.merge!(key: "bar")
# => {:key=>"bar"}
해시는 기본적으로 순서가 지정되지 않았기 때문에 추가 개념이 없습니다. 그러나 1.9 이후의 루비 해시는 삽입 순서를 유지합니다. 새 키 / 값 쌍을 추가하는 방법은 다음과 같습니다.
가장 간단한 해결책은
h[:key] = "bar"
방법을 원하면 다음을 사용하십시오 store
.
h.store(:key, "bar")
정말로 "삽"연산자 ( <<
) 를 사용하려면 실제로 해시 값에 배열로 추가되며 키를 지정해야합니다.
h[:key] << "bar"
위의 내용은 키가있는 경우에만 작동합니다. 새 키를 추가하려면 다음과 같이 할 수있는 기본값으로 해시를 초기화해야합니다.
h = Hash.new {|h, k| h[k] = ''}
h[:key] << "bar"
당신은 당신이 작성한 방식대로 작동하는 삽 연산자를 포함하기 위해 원숭이 패치 Hash를 유혹 할 수 있습니다.
class Hash
def <<(k,v)
self.store(k,v)
end
end
그러나 이것은 다른 컨텍스트에서 삽 연산자에 적용된 "구문 설탕"을 상속하지 않습니다.
h << :key, "bar" #doesn't work
h.<< :key, "bar" #works
아니요, 키 / 값 쌍을 추가 할 수 없다고 생각합니다. 내가 아는 가장 가까운 유일한 store
방법 은 방법을 사용하는 것입니다.
h = {}
h.store("key", "value")
아마도 Hash # merge를 원하십니까?
1.9.3p194 :015 > h={}
=> {}
1.9.3p194 :016 > h.merge(:key => 'bar')
=> {:key=>"bar"}
1.9.3p194 :017 >
제자리에서 배열을 변경하려면 merge!
1.9.3p194 :016 > h.merge!(:key => 'bar')
=> {:key=>"bar"}
비슷한 작업을해야했지만 동일한 키로 값을 추가해야했습니다. 병합 또는 업데이트를 사용할 때 동일한 키로 값을 푸시 할 수 없습니다. 그래서 해시 배열을 사용해야했습니다.
my_hash_static = {:header =>{:company => 'xx', :usercode => 'xx', :password => 'xx',
:type=> 'n:n', :msgheader => from}, :body=>[]}
my_hash_dynamic = {:mp=>{:msg=>message, :no=>phones} }
my_hash_full = my_hash_static[:body].push my_hash_dynamic
Similar as they are, merge!
and store
treat existing hashes differently depending on keynames, and will therefore affect your preference. Other than that from a syntax standpoint, merge!
's key: "value"
syntax closely matches up against JavaScript and Python. I've always hated comma-separating key-value pairs, personally.
hash = {}
hash.merge!(key: "value")
hash.merge!(:key => "value")
puts hash
{:key=>"value"}
hash = {}
hash.store(:key, "value")
hash.store("key", "value")
puts hash
{:key=>"value", "key"=>"value"}
To get the shovel operator <<
working, I would advise using Mark Thomas's answer.
참고URL : https://stackoverflow.com/questions/19756139/append-key-value-pair-to-hash-with-in-ruby
'Programing' 카테고리의 다른 글
Visual Studio 디버거에서 개체를 직렬화하는 방법 (0) | 2020.10.28 |
---|---|
Android Studio Gradle 프로젝트 "데몬 프로세스를 시작할 수 없음 / VM 초기화" (0) | 2020.10.28 |
Ruby on Rails 확장 성 / 성능? (0) | 2020.10.28 |
포착되지 않은 TypeError : Object.values는 함수 JavaScript가 아닙니다. (0) | 2020.10.28 |
Python의 순환 가져 오기 종속성 (0) | 2020.10.28 |