Hash Maps in Ruby [Closed]
Given: Hash = { "Value" => 4, "Details" => "I Am Some Details"}, {"Value" => 5, "Details" => "I Am New Details"} Can I Do Something Like: Hash. Each Do |Key...
Given:
hash = { "value" => 4, "details" => "I am some details"}, {"value" => 5, "details" => "I am new details"}
can I do something like:
hash.each do |key, value|
puts "#{key} is #{value}"
end
to get something like:
{ "value" => 4, "details" => "I am some details"} is {"value" => 5, "details" => "I am new details"} is
If a hash table (map) is not what I want to do this with, what would be? Databases are out of the question. The user should be able to continue to add on to the end with another {} if they need to filling out the same details as what's in the first two.
You've created an array of hashes, which you can do more explicitly as:
hashes = [{:value => "foo"}, {:value => "bar"}]
You can then append with
hashes << {:value => "baz"}
If you're ever wondering what type of variable you're working with, you can do var.class:
hash = { "value" => 4, "details" => "I am some details"}, {"value" => 5, "details" => "I am new details"}
hash.class #=> Array
A Map is a mapping of Distinct Keys to Values; there are Map variations which relax this, but Ruby's Hashmap follows the standard Map ADT.
In this case an Array of two different Hashes (each with a "value" and a "details") is being created.
> x = [1,2] # standard Array literal
=> [1,2]
> x = 1,2 # as in the posted code, no []'s, but ..
=> [1,2] # .. the same: the =, production created the Array here!
So it's not a Hash in hash, but rather an Array (containing two Hash elements) :)
Compare the results with the following and note that b is nil each time:
["one","two","three","four"].each do |a,b|
puts ">" + a + "|" + b
end
This is why it prints "hash1.to_str is hash2.to_str is" as the each iterates over the Array, as discussed above and only the first argument is populated with a meaningful value - one of the hashes.
I don't understand what "databases are out of the question" means in this context. Sounds like you're creating a data store, and so far it looks like you have a numeric ID with a related value.
A hash is a hash; you'd add values to the hash:
h = { "4" => "foo" } # Initial values
h["5"] = "ohai"
h["6"] = "kthxbai"