Asp Forum
Home
|
Login
|
Register
|
Search
Forums
>
comp.lang.ruby
Hash#shift
Harry Kakueki
5/14/2007 12:59:00 PM
Hi,
I was reading this
http://www.rubycentral.com/book/ref_c_hash.html#...
and I wondered how this could be useful. I must be missing something.
I tried this
ahash = {"a" => "apple","b"=> "boat","c" =>"car", "dog" => "zebra",
"elephant" => "yak"}
p ahash #=>{"a" => "apple","b"=> "boat","c" =>"car","elephant" =>
"yak", "dog" => "zebra"}
p ahash.shift #=>["a", "apple"]
p ahash.shift #=>["b", "boat"]
p ahash.shift #=>["c", "car"]
p ahash.shift #=>["elephant", "yak"]
p ahash.shift #=>["dog", "zebra"]
Since the order of a hash is not guaranteed, you do not know what you
are shifting at any given time. Is this right?
If you just wanted to shift everything you could use Hash#each.
What am I missing?
Harry
--
A Look into Japanese Ruby List in English
http://www.ka...
2 Answers
Robert Klemme
5/14/2007 1:18:00 PM
0
On 14.05.2007 14:59, Harry Kakueki wrote:
> Hi,
>
> I was reading this
>
http://www.rubycentral.com/book/ref_c_hash.html#...
>
> and I wondered how this could be useful. I must be missing something.
>
> I tried this
>
> ahash = {"a" => "apple","b"=> "boat","c" =>"car", "dog" => "zebra",
> "elephant" => "yak"}
> p ahash #=>{"a" => "apple","b"=> "boat","c" =>"car","elephant" =>
> "yak", "dog" => "zebra"}
> p ahash.shift #=>["a", "apple"]
> p ahash.shift #=>["b", "boat"]
> p ahash.shift #=>["c", "car"]
> p ahash.shift #=>["elephant", "yak"]
> p ahash.shift #=>["dog", "zebra"]
>
> Since the order of a hash is not guaranteed, you do not know what you
> are shifting at any given time. Is this right?
> If you just wanted to shift everything you could use Hash#each.
>
> What am I missing?
I never had use for this myself but it might be useful in cases where
you want to iterate through a (possibly temporary) Hash and make sure
that elements that you have processed are removed. Like
>> h={:foo=>1, :bar=>2, :baz=>3}
=> {:baz=>3, :foo=>1, :bar=>2}
>> until h.empty?
>> k, v = h.shift
>> puts "processing: #{k} - #{v}"
>> end
processing: baz - 3
processing: foo - 1
processing: bar - 2
=> nil
>> h
=> {}
If you now leave the loop early (for whatever reasons, "return" or
raise) you only leave elements that still have to be processed in the Hash.
Kind regards
robert
Harry Kakueki
5/14/2007 2:02:00 PM
0
On 5/14/07, Robert Klemme <shortcutter@googlemail.com> wrote:
> I never had use for this myself but it might be useful in cases where
> you want to iterate through a (possibly temporary) Hash and make sure
> that elements that you have processed are removed. Like
>
> >> h={:foo=>1, :bar=>2, :baz=>3}
> => {:baz=>3, :foo=>1, :bar=>2}
> >> until h.empty?
> >> k, v = h.shift
> >> puts "processing: #{k} - #{v}"
> >> end
> processing: baz - 3
> processing: foo - 1
> processing: bar - 2
> => nil
> >> h
> => {}
>
> If you now leave the loop early (for whatever reasons, "return" or
> raise) you only leave elements that still have to be processed in the Hash.
>
> Kind regards
>
> robert
>
>
OK.
You would be shifting in a somewhat random order but you would be able
to keep track of what had not yet been shifted.
Thanks for that example.
Harry
--
A Look into Japanese Ruby List in English
http://www.ka...
Servizio di avviso nuovi messaggi
Ricevi direttamente nella tua mail i nuovi messaggi per
Hash#shift
Inserendo la tua e-mail nella casella sotto, riceverai un avviso tramite posta elettronica ogni volta che il motore di ricerca troverà un nuovo messaggio per te
Il servizio è completamente GRATUITO!
x
Login to ForumsZone
Login with Google
Login with E-Mail & Password