Dodaj parę klucz/wartość do skrótu za pomocą
W Rubim można dodawać wartości do istniejących tablic używając
a = []
a << "foo"
Ale czy możesz również dodać pary klucz / wartość do istniejącego hasha?
h = {}
h << :key "bar"
Wiem, że potrafisz:
h[:key] = ""
h[:key] << "bar"
Ale tego nie chcę.
Dzięki.
59
6 answers
Jest merge!
.
h = {}
h.merge!(key: "bar")
# => {:key=>"bar"}
107
Author: sawa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-17 13:27:51
Ponieważ hasze nie są z natury uporządkowane, nie ma pojęcia dodawania. Hasze Ruby od wersji 1.9 zachowują jednak kolejność wstawiania. Oto sposoby dodawania nowych par klucz / wartość.
Najprostszym rozwiązaniem jest
h[:key] = "bar"
Jeśli chcesz metody, użyj store
:
h.store(:key, "bar")
Jeśli naprawdę, naprawdę chcesz użyć operatora "shovel "(<<
), w rzeczywistości jest on dołączany do wartości hash jako tablica i musisz podać klucz:
h[:key] << "bar"
Powyższe działa tylko wtedy, gdy klucz istnieje. Aby dodać nowy klucz, musisz zainicjować hash wartością domyślną, co możesz zrobić w następujący sposób:
h = Hash.new {|h, k| h[k] = ''}
h[:key] << "bar"
Możesz pokusić się o dodanie operatora łopaty, który działa tak, jak napisałeś:
class Hash
def <<(k,v)
self.store(k,v)
end
end
Jednak nie dziedziczy to "cukru składniowego" zastosowanego do operatora łopaty w innych kontekstach:
h << :key, "bar" #doesn't work
h.<< :key, "bar" #works
64
Author: Mark Thomas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-01 13:27:06
Nie, Nie wydaje mi się, aby można było dodawać pary klucz / wartość. Jedyną rzeczą najbliższą, o której wiem, jest użycie metody store
:
h = {}
h.store("key", "value")
21
Author: PericlesTheo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-03 18:18:46
Może chcesz Hash#merge ?
1.9.3p194 :015 > h={}
=> {}
1.9.3p194 :016 > h.merge(:key => 'bar')
=> {:key=>"bar"}
1.9.3p194 :017 >
Jeśli chcesz zmienić tablicę w miejscu Użyj merge!
1.9.3p194 :016 > h.merge!(:key => 'bar')
=> {:key=>"bar"}
2
Author: Michael Durrant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-03 18:22:40
Musiałem zrobić podobną rzecz, ale musiałem dodać wartości z tymi samymi kluczami. Kiedy używam merge lub update, nie mogę wciskać wartości za pomocą tych samych klawiszy. Więc musiałem użyć tablicy hashów.
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
1
Author: Caner Çakmak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-02 20:57:53
Podobnie jak one, merge!
i store
traktują istniejące w różny sposób w zależności od nazw keynames, co wpłynie na twoje preferencje. Poza tym z punktu widzenia składni, składnia merge!
'S key: "value"
ściśle pasuje do JavaScript i Pythona. Osobiście zawsze nienawidziłem par klucz-wartość oddzielających przecinki.
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"}
Aby operator łopaty <<
działał, radzę użyć Mark Thomas 's answer.
0
Author: kayleeFrye_onDeck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:12
W Rubim można dodawać wartości do istniejących tablic używając
a = []
a << "foo"
Ale czy możesz również dodać pary klucz / wartość do istniejącego hasha?
h = {}
h << :key "bar"
Wiem, że potrafisz:
h[:key] = ""
h[:key] << "bar"
Ale tego nie chcę.
Dzięki. 6 answers
Jest merge!
.
h = {}
h.merge!(key: "bar")
# => {:key=>"bar"}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-17 13:27:51
Ponieważ hasze nie są z natury uporządkowane, nie ma pojęcia dodawania. Hasze Ruby od wersji 1.9 zachowują jednak kolejność wstawiania. Oto sposoby dodawania nowych par klucz / wartość.
Najprostszym rozwiązaniem jest
h[:key] = "bar"
Jeśli chcesz metody, użyj store
:
h.store(:key, "bar")
Jeśli naprawdę, naprawdę chcesz użyć operatora "shovel "(<<
), w rzeczywistości jest on dołączany do wartości hash jako tablica i musisz podać klucz:
h[:key] << "bar"
Powyższe działa tylko wtedy, gdy klucz istnieje. Aby dodać nowy klucz, musisz zainicjować hash wartością domyślną, co możesz zrobić w następujący sposób:
h = Hash.new {|h, k| h[k] = ''}
h[:key] << "bar"
Możesz pokusić się o dodanie operatora łopaty, który działa tak, jak napisałeś:
class Hash
def <<(k,v)
self.store(k,v)
end
end
Jednak nie dziedziczy to "cukru składniowego" zastosowanego do operatora łopaty w innych kontekstach:
h << :key, "bar" #doesn't work
h.<< :key, "bar" #works
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-01 13:27:06
Nie, Nie wydaje mi się, aby można było dodawać pary klucz / wartość. Jedyną rzeczą najbliższą, o której wiem, jest użycie metody store
:
h = {}
h.store("key", "value")
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-03 18:18:46
Może chcesz Hash#merge ?
1.9.3p194 :015 > h={}
=> {}
1.9.3p194 :016 > h.merge(:key => 'bar')
=> {:key=>"bar"}
1.9.3p194 :017 >
Jeśli chcesz zmienić tablicę w miejscu Użyj merge!
1.9.3p194 :016 > h.merge!(:key => 'bar')
=> {:key=>"bar"}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-03 18:22:40
Musiałem zrobić podobną rzecz, ale musiałem dodać wartości z tymi samymi kluczami. Kiedy używam merge lub update, nie mogę wciskać wartości za pomocą tych samych klawiszy. Więc musiałem użyć tablicy hashów.
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-02 20:57:53
Podobnie jak one, merge!
i store
traktują istniejące w różny sposób w zależności od nazw keynames, co wpłynie na twoje preferencje. Poza tym z punktu widzenia składni, składnia merge!
'S key: "value"
ściśle pasuje do JavaScript i Pythona. Osobiście zawsze nienawidziłem par klucz-wartość oddzielających przecinki.
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"}
Aby operator łopaty <<
działał, radzę użyć Mark Thomas 's answer.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:12