![]() |
Creating hashes with duplicate keys
I want to simplify this hash creation:
g = { 1 => "test", 2 => "test", } I have a particularly complicated hash that I'm generating. It can have very large values. Right now, I duplicate values with something like this: c = { 1 => "one", } d = { 2 => c[1], } c.merge!(d) however, I don't like the way my code looks.. I want to be able to specify the duplication within the hash generation. Is this possible? |
Re: Creating hashes with duplicate keys
On 28/07/06, Sy Ali <sy1234@gmail.com> wrote:
> I want to simplify this hash creation: > g = { 1 => "test", 2 => "test", } > > I have a particularly complicated hash that I'm generating. It can > have very large values. > > Right now, I duplicate values with something like this: > > c = { 1 => "one", } > d = { 2 => c[1], } > c.merge!(d) > > however, I don't like the way my code looks.. I want to be able to > specify the duplication within the hash generation. > > Is this possible? Something like this? irb(main):001:0> c={} => {} irb(main):002:0> c[1] = "one" => "one" irb(main):003:0> c[2] = c[1] => "one" irb(main):004:0> c[1].object_id == c[2].object_id => true Farrel |
Re: Creating hashes with duplicate keys
Sy Ali wrote:
> I want to simplify this hash creation: > g = { 1 => "test", 2 => "test", } > > I have a particularly complicated hash that I'm generating. It can > have very large values. > > Right now, I duplicate values with something like this: > > c = { 1 => "one", } > d = { 2 => c[1], } > c.merge!(d) > > however, I don't like the way my code looks.. I want to be able to > specify the duplication within the hash generation. > > Is this possible? This will work: hsh = Hash.new{|h, k| h[k] = (k == 1 ? "one" : h[k - 1])} Note that all the values will be the same -- the same object! If you want duplicates, do this instead: hsh = Hash.new{|h, k| h[k] = (k == 1 ? "one" : h[k - 1].dup)} Just ask if there are parts of the snippet you don't understand. Cheers, Daniel |
Re: Creating hashes with duplicate keys
fr Sy:
# I want to simplify this hash creation: # g =3D { 1 =3D> "test", 2 =3D> "test", } # ... # however, I don't like the way my code looks.. I want to be able to # specify the duplication within the hash generation. not sure if this simple idea will help, but, irb(main):055:0> class Hash irb(main):056:1> def init2 range irb(main):057:2> range.each{|c| self[c]=3Dself.default} irb(main):058:2> end irb(main):059:1> end =3D> nil irb(main):060:0> h=3DHash.new =3D> {} irb(main):065:0> h.default =3D "test" =3D> "test" irb(main):066:0> h.init2 1..8 =3D> 1..8 irb(main):067:0> h =3D> {5=3D>"test", 6=3D>"test", 1=3D>"test", 7=3D>"test", 2=3D>"test", = 8=3D>"test", 3=3D>"test", 4=3D>"test"} irb(main):068:0> h.default =3D "testing again" =3D> "testing again" irb(main):069:0> h.init2 6..10 =3D> 6..10 irb(main):070:0> h =3D> {5=3D>"test", 6=3D>"testing again", 1=3D>"test", 7=3D>"testing = again", 2=3D>"test", 8=3D>"testing again", 3=3D>"test", 9=3D>"testing = again", 4=3D>"test", 10=3D>"testing again"} irb(main):071:0> kind regards -botp |
Re: Creating hashes with duplicate keys
On Fri, 28 Jul 2006, Sy Ali wrote:
> I want to simplify this hash creation: > g = { 1 => "test", 2 => "test", } > > I have a particularly complicated hash that I'm generating. It can > have very large values. > > Right now, I duplicate values with something like this: > > c = { 1 => "one", } > d = { 2 => c[1], } > c.merge!(d) > > however, I don't like the way my code looks.. I want to be able to > specify the duplication within the hash generation. > > Is this possible? use rbtree (from the raa) harp:~ > cat a.rb require 'rbtree' rb = RBTree.new rb[1] = 'test' rb[2] = 'test' rb.each{|k,v| p [k,v]} harp:~ > ruby a.rb [1, "test"] [2, "test"] regards. -a -- we can never obtain peace in the outer world until we make peace with ourselves. - h.h. the 14th dali lama |
Re: Creating hashes with duplicate keys
On Fri, 28 Jul 2006 Ara.T.Howard@noaa.gov wrote:
> use rbtree (from the raa) > > harp:~ > cat a.rb > require 'rbtree' > > rb = RBTree.new > > rb[1] = 'test' > rb[2] = 'test' > > rb.each{|k,v| p [k,v]} > > > harp:~ > ruby a.rb > [1, "test"] > [2, "test"] yikes - hit send too soon, here ya go: harp:~ > cat a.rb require 'rbtree' rb = MultiRBTree.new rb[1] = 'test' rb[1] = 'test' rb.each{|k,v| p [k,v]} p rb.to_a p rb[1] harp:~ > ruby a.rb [1, "test"] [1, "test"] [[1, "test"], [1, "test"]] "test" -a -- we can never obtain peace in the outer world until we make peace with ourselves. - h.h. the 14th dali lama |
| All times are GMT. The time now is 04:52 AM. |
Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.