[ruby] Ruby에서 기존 해시에 추가하는 방법
추가에 관하여 key => value
Ruby의 기존 채워진 해시에 쌍 Apress의 Beginning Ruby를 통해 작업하는 중이며 해시 장을 방금 마쳤습니다.
해시로 동일한 결과를 얻을 수있는 가장 간단한 방법을 찾으려고합니다.
x = [1, 2, 3, 4]
x << 5
p x
답변
해시가있는 경우 키로 참조하여 항목을 추가 할 수 있습니다.
hash = { }
hash[:a] = 'a'
hash[:a]
# => 'a'
여기서는 [ ]
빈 배열 { }
을 만드는 것과 같이 빈 해시를 만듭니다.
배열에는 특정 순서로 0 개 이상의 요소가 있으며 요소가 중복 될 수 있습니다. 해시에는 key로 구성된 0 개 이상의 요소 가 있습니다. 여기서 키는 복제되지 않지만 해당 위치에 저장된 값은 복제 될 수 있습니다.
Ruby의 해시는 매우 유연하며 던질 수있는 거의 모든 유형의 키를 가질 수 있습니다. 이것은 다른 언어에서 찾을 수있는 사전 구조와 다릅니다.
해시 키의 특정 특성이 종종 중요하다는 점을 기억하는 것이 중요합니다.
hash = { :a => 'a' }
# Fetch with Symbol :a finds the right value
hash[:a]
# => 'a'
# Fetch with the String 'a' finds nothing
hash['a']
# => nil
# Assignment with the key :b adds a new entry
hash[:b] = 'Bee'
# This is then available immediately
hash[:b]
# => "Bee"
# The hash now contains both keys
hash
# => { :a => 'a', :b => 'Bee' }
Ruby on Rails는 HashWithIndifferentAccess를 제공하여 Symbol과 String 주소 지정 방법간에 자유롭게 변환 할 수 있도록하여이를 다소 혼동합니다.
클래스, 숫자 또는 기타 해시를 포함하여 거의 모든 항목에 대해 색인을 생성 할 수도 있습니다.
hash = { Object => true, Hash => false }
hash[Object]
# => true
hash[Hash]
# => false
hash[Array]
# => nil
해시는 배열로 또는 그 반대로 변환 할 수 있습니다.
# Like many things, Hash supports .to_a
{ :a => 'a' }.to_a
# => [[:a, "a"]]
# Hash also has a handy Hash[] method to create new hashes from arrays
Hash[[[:a, "a"]]]
# => {:a=>"a"}
해시에 “삽입”하는 경우 한 번에 하나씩 수행하거나 merge
방법을 사용하여 해시를 결합 할 수 있습니다 .
{ :a => 'a' }.merge(:b => 'b')
# {:a=>'a',:b=>'b'}
이것은 원래 해시를 변경하지 않고 대신 새 해시를 반환합니다. 한 해시를 다른 해시로 결합하려면 다음 merge!
방법을 사용할 수 있습니다 .
hash = { :a => 'a' }
# Returns the result of hash combined with a new hash, but does not alter
# the original hash.
hash.merge(:b => 'b')
# => {:a=>'a',:b=>'b'}
# Nothing has been altered in the original
hash
# => {:a=>'a'}
# Combine the two hashes and store the result in the original
hash.merge!(:b => 'b')
# => {:a=>'a',:b=>'b'}
# Hash has now been altered
hash
# => {:a=>'a',:b=>'b'}
String 및 Array의 많은 메서드와 마찬가지로 !
는 내부 작업 임을 나타냅니다 .
답변
my_hash = {:a => 5}
my_hash[:key] = "value"
답변
두 개 이상을 추가하려는 경우 :
hash = {:a => 1, :b => 2}
hash.merge! :c => 3, :d => 4
p hash
답변
x = {:ca => "Canada", :us => "United States"}
x[:de] = "Germany"
p x
답변
hash = { a: 'a', b: 'b' }
=> {:a=>"a", :b=>"b"}
hash.merge({ c: 'c', d: 'd' })
=> {:a=>"a", :b=>"b", :c=>"c", :d=>"d"}
병합 된 값을 반환합니다.
hash
=> {:a=>"a", :b=>"b"}
그러나 호출자 개체를 수정하지 않습니다.
hash = hash.merge({ c: 'c', d: 'd' })
=> {:a=>"a", :b=>"b", :c=>"c", :d=>"d"}
hash
=> {:a=>"a", :b=>"b", :c=>"c", :d=>"d"}
재 할당은 트릭을 수행합니다.
답변
hash {}
hash[:a] = 'a'
hash[:b] = 'b'
hash = {:a => 'a' , :b = > b}
사용자 입력에서 키와 값을 가져올 수 있으므로 Ruby를 사용할 수 있습니다. .to_sym 은 문자열을 기호 로 변환 하고 .to_i 는 문자열을 정수로 변환합니다.
예를 들면 :
movies ={}
movie = gets.chomp
rating = gets.chomp
movies[movie.to_sym] = rating.to_int
# movie will convert to a symbol as a key in our hash, and
# rating will be an integer as a value.
답변
Ruby 2.0부터 사용할 수있는 이중 표시 연산자를 사용할 수 있습니다.
h = { a: 1, b: 2 }
h = { **h, c: 3 }
p h
# => {:a=>1, :b=>2, :c=>3}