From: John Joyce Date: 2007-06-16T22:03:40+09:00 Subject: Re: test to see if a variable exists On Jun 15, 2007, at 4:58 PM, Morton Goldberg wrote: > On Jun 15, 2007, at 4:36 PM, Colin Summers wrote: > >> 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) > > Using a hash is the way to go here. You've already been advised to > do that. But here is an example that may give you some additional > insight. > > > class Identity > def initialize(ss) > @ss = ss > end > def process > puts "#{@ss}: I've been stolen!" > end > end > > Stolen = {} > > ss1 = '123-12-1234' > ss2 = '789-78-7890' > Stolen[ss1] = Identity.new(ss1) > > # One way > Stolen[ss1].process if Stolen[ss1] # process runs > Stolen[ss2].process if Stolen[ss2] # process does not run > > # Another way > Stolen[ss1].process rescue nil # process runs > Stolen[ss2].process rescue nil # process does not run > > > There are many other ways, but they all rely on same thing: that > Stolen[ss2] returns nil and nil is treated as false in boolean > expressions. > > Regards, Morton > > > 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.