So I am stealing all these identities and storing everything in a big
array of objects stolen_identity, and having the index be social
security numbers:
ss[34323843] = Stolen_identity.new
But say I pick up a paycheck stub and it has 3428294. How do I know if
I already have it? Does
if (exist ss[3428294]) then … end
work? How can I see if a variable exists?
Thanks.
(please include your social security with your answer)
So I am stealing all these identities and storing everything in a big
array of objects stolen_identity, and having the index be social
security numbers:
ss[34323843] = Stolen_identity.new
But say I pick up a paycheck stub and it has 3428294. How do I know if
I already have it? Does
if (exist ss[3428294]) then … end
work? How can I see if a variable exists?
Arrays (and Hashes) in Ruby are sparse - they only store the values
you actually enter. However, there are some limitations on the size of
indices for arrays:
C:>irb
irb(main):001:0> ss = []
=> []
irb(main):002:0> ss[ 884_56_2103 ] = “I HAVE YOU NOW”
ArgumentError: index too big
from (irb):2:in `[]=’
from (irb):2
So, you probably want to use a Hash, which has no such limitation.
With both Arrays and Hashes, supplying a key or index which has no
stored value will return a nil object:
irb(main):003:0> ss = {}
=> {}
irb(main):004:0> ss[ 884_56_2103 ] = “I HAVE YOU NOW”
=> “I HAVE YOU NOW”
irb(main):005:0> ss[ 912_34_3552 ]
=> nil
In Ruby, nil and false are both non-truth values for the purposes of
boolean logic. Additionally (and slightly more cleanly), you can ask a
Hash directly if it has an entry for a specific key:
irb(main):006:0> if ss.has_key?( 884_56_2103 ) then
irb(main):007:1* puts “I’m done with this guy”
irb(main):008:1> else
irb(main):009:1* puts “Sweet new information!”
irb(main):010:1> end
I’m done with this guy
Stolen = {}
Stolen[ss1].process rescue nil # process runs
An array could indeed work. Think about the structure of a SSN:
377-23-4736 (not a real one)
That looks like a multi-dimensional array to me.
each part is limited: 3 digits, 2 digits, 4 digits.
Much like IPv4 this can produce a lot of distinct numbers.
These smaller parts are easier to process, possibly less overhead.
An array could indeed work. Think about the structure of a SSN:
377-23-4736 (not a real one)
That looks like a multi-dimensional array to me.
each part is limited: 3 digits, 2 digits, 4 digits.
Much like IPv4 this can produce a lot of distinct numbers.
These smaller parts are easier to process, possibly less overhead.
I don’t doubt that Identity objects could be indexed into some kind
of array, but I do think the hash approach is simpler and easier to
implement. I’d be happy to be convinced otherwise. How about posting
some code to prove your point?
Regards, Morton
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.