Hashes...
Author |
Message |
Sorb
|
Posted: Thu Dec 14, 2006 7:16 am Post subject: Hashes... |
|
|
I'm a bit new to ruby and I'm currently struggling over hashes.
I can create a hash from scratch just fine with 2 => "robot" and all that however what I'm wanting to do is read a txt then create a hash of the information within.
i.e. it says
1 John Smith 25 UK
2 Fred O'Neill 31 UK
I'd want it so in the hash I have a few 1s with John, Smith, 25 and UK and 2s with Fred's data.
The most I can get however right now is just taking out one of the pieces of data and shoving it into a string. All attempts to make a hash are failing...
How would I do this? |
|
|
|
|
|
Sponsor Sponsor
|
|
|
Sorb
|
Posted: Thu Dec 14, 2006 8:11 am Post subject: (No subject) |
|
|
hmm can't edit...
What I mean basically is I want to create a 2d array where I can somehow later in the code put in what ever code is relevant to compare the natioanlity (UK for these two).
I can pass one value into a array each so for 1 it will give me John.
Any further though and though it seems to accept 1 => Smith I cannot retrieve that Smith in anyway. |
|
|
|
|
|
rdrake
|
Posted: Thu Dec 14, 2006 12:37 pm Post subject: Re: Hashes... |
|
|
Sorb wrote: I'm a bit new to ruby and I'm currently struggling over hashes.
I can create a hash from scratch just fine with 2 => "robot" and all that however what I'm wanting to do is read a txt then create a hash of the information within.
i.e. it says
1 John Smith 25 UK
2 Fred O'Neill 31 UK
I'd want it so in the hash I have a few 1s with John, Smith, 25 and UK and 2s with Fred's data.
The most I can get however right now is just taking out one of the pieces of data and shoving it into a string. All attempts to make a hash are failing...
How would I do this? Something tells me a hash is not what you want.... A hash stores a value, but it gives us a nice, pretty name in order to access that value. Take this, for example.
code: | irb(main):005:0> colour = {"favourite" => "green", "leastfav" => "pink"}
=> {"leastfav"=>"pink", "favourite"=>"green"}
irb(main):006:0> puts "My favourite colour is #{colour["favourite"]} while my least favourite is #{colour["leastfav"]}."
My favourite colour is green while my least favourite is pink.
=> nil | Basically a hash is a fancy array with a named index vs. a numbered one.
What you could potentially do is store all information inside of a hash, then create an array of the hash. Take this, for example.
code: | irb(main):007:0> lots_of_info = Array.new
=> []
irb(main):008:0> lots_of_info[0] = {"id" => 1, "name" => "John Smith", "age" => 25, "location" => "UK"}
=> {"name"=>"John Smith", "id"=>1, "age"=>25, "location"=>"UK"}
irb(main):009:0> lots_of_info[1] = {"id" => 2, "name" => "Fred O'Neill", "age" => 31, "location" => "UK"}
=> {"name"=>"Fred O'Neill", "id"=>2, "age"=>31, "location"=>"UK"}
irb(main):010:0> lots_of_info[0]["name"]
=> "John Smith" | Now I'm not saying it's the best solution, just saying that it can be done if you wish . |
|
|
|
|
|
wtd
|
Posted: Thu Dec 14, 2006 12:46 pm Post subject: (No subject) |
|
|
Something like...?
Note: I do this because I highly doubt Ruby is for a school assignment.
code: | my_hash = {}
# Iterate through each line.
IO.foreach("my-file") do |line|
# Split the line into an array on spaces.
info = line.split(/\s+/)
# Grab the first piece of info. Also, convert to integer.
key = info[0].to_i
# The name.
name = "#{name[1]} #{name[2]}"
# Age.
age = info[3]
# Location.
location = name[5]
# Create a hash of the data.
info = {:name => name, :age => age, :location => location}
# Put that hash into the main hash.
my_hash[key] = info
end |
Then you could get Fred's age with something like:
|
|
|
|
|
|
|
|