Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > newbie, hash or 2dArry

Reply
Thread Tools

newbie, hash or 2dArry

 
 
Zac Elston
Guest
Posts: n/a
 
      03-30-2007
I'm lost or just tired from guessing.

I need to make an hash I can call by hostname as the key and some random
amount of data after that as the values. now a hash works great for 1
to 1 maps (h[serverX] ==> result) but I need
h[serverX][query|result|time]

so how would I write a hash that would give me access to

in:
h[host_to_query]["query"]] = @query
h[host_to_query]["result"]] = queryhost(host_to_query,@query)

out:
for h.each |host| puts h[[host]["result"]]

thanks

zaq

--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
 
Stefano Crocco
Guest
Posts: n/a
 
      03-30-2007
Alle venerd=C3=AC 30 marzo 2007, Zac Elston ha scritto:
> I'm lost or just tired from guessing.
>
> I need to make an hash I can call by hostname as the key and some random
> amount of data after that as the values. now a hash works great for 1
> to 1 maps (h[serverX] =3D=3D> result) but I need
> h[serverX][query|result|time]
>
> so how would I write a hash that would give me access to
>
> in:
> h[host_to_query]["query"]] =3D @query
> h[host_to_query]["result"]] =3D queryhost(host_to_query,@query)
>
> out:
> for h.each |host| puts h[[host]["result"]]
>
> thanks
>
> zaq


If I understand correctly, you can create a class with the required instanc=
es
variables (or use Struct or OpenStruct) and store query and result there. F=
or
instance, using OpenStruct:

require 'ostruct'

h[host_to_query] =3DOpenStruct.new(:query=3D> @query, :result=3D queryhost(=
host_to_query,@query)

then

h.each_value{|v| puts v.result}

=46or more information, you can look at the ri documentation for Hash, Stru=
ct=20
and OpenStruct (ri Hash, ri Struct, ri OpenStruct).

I hope this helps

Stefano

 
Reply With Quote
 
 
 
 
Keith Tom
Guest
Posts: n/a
 
      03-30-2007
Zac Elston wrote:
> I'm lost or just tired from guessing.
>
> I need to make an hash I can call by hostname as the key and some random
> amount of data after that as the values. now a hash works great for 1
> to 1 maps (h[serverX] ==> result) but I need
> h[serverX][query|result|time]
>
> so how would I write a hash that would give me access to
>
> in:
> h[host_to_query]["query"]] = @query
> h[host_to_query]["result"]] = queryhost(host_to_query,@query)
>
> out:
> for h.each |host| puts h[[host]["result"]]
>
> thanks
>
> zaq
>
>

Hey Zac,

Would a nested hash do the trick?

hash = { :host1 => {
:query => @query,
:result => queryhost(...),
:time => time} }


then for output, you'd do something like
for hash.each_value do |value| puts value[:result] end

Hopefully that does the trick,
Keith


 
Reply With Quote
 
Robert Klemme
Guest
Posts: n/a
 
      03-30-2007
On 30.03.2007 18:54, Zac Elston wrote:
> I'm lost or just tired from guessing.
>
> I need to make an hash I can call by hostname as the key and some random
> amount of data after that as the values. now a hash works great for 1
> to 1 maps (h[serverX] ==> result) but I need
> h[serverX][query|result|time]
>
> so how would I write a hash that would give me access to
>
> in:
> h[host_to_query]["query"]] = @query
> h[host_to_query]["result"]] = queryhost(host_to_query,@query)


This is syntactically incorrect since oyu have one closing bracket too much.

> out:
> for h.each |host| puts h[[host]["result"]]


Here's an alternative:

Info = Struct.new :query, :result, :time
h = Hash.new {|h,k| h[k] = Info.new}
h[serverX].query = @query
h[serverX].result = queryhost(host_to_query,@query)
h.each {|ho,inf| puts inf.result}

Of course you can use Arrays instead of Info but the code with Info is
more readable and less error prone.

Kind regards

robert
 
Reply With Quote
 
Zac Elston
Guest
Posts: n/a
 
      04-05-2007
first, thanks for the responses, ruby really is a great language.

My delima is that I'm trying to multithread the actions and store the
results in a hash with the hostname as key

to redefine the issue, for each host I need a thread and I expect a
result, then I'd like to be able to see the result in a
hash[host][result]

but I'm having trouble mixing the hash with the thread. maybe I'm going
about this all wrong. (this is outputting to a rails view, which is why
i have "@vars"

I have

@threads = []
@resulthash = Hash.new(0)
@hostarray.each do |host|
threads << Thread.new(host) do |myhost|
@resulthash = { :myhost => {
ackages => @mypackages,
:result => doXMLquery(host,@mypackages)} }
logger.info("host = " + host + ", result = " +
@resulthash[:myhost][:result])
end
end

@threads.each {|thr| thr.join }

logger.info("result of threads..")
@hostarray.each do |myhost|
logger.info("host = " + myhost + ", result = " +
@resulthash[:myhost][:result])
end

logger output

host = hostX, result = --data returned from hostX--
host = hostY, result = --data returned from hostY--
result of threads..
host = hostX, result = --data returned from hostY--
host = hostY, result = --data returned from hostY--

I'm clearly loosing context of the [:host][:result] in the final two
lines.

any pointers?

thanks
-zaq

--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
Zac Elston
Guest
Posts: n/a
 
      04-05-2007
I used Openstruct and it appears to give me what I want. I'm still
interested in why a nested hash didn't work if anyone knows.

thanks again
-zaq

--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
hash of hash of hash of hash in c++ rp C++ 1 11-10-2011 04:45 PM
Hash#select returns an array but Hash#reject returns a hash... Srijayanth Sridhar Ruby 19 07-02-2008 12:49 PM
Is there a hash algorithm with direct access to hash elements andreference count? Bo Peng C++ 4 03-12-2006 05:57 AM
In 'HashMap.put', "if (e.hash == hash && eq(k, e.key))" ? Red Orchid Java 3 01-30-2006 07:04 PM
standard library for hash table storage and hash algorithm Pieter Claassen C Programming 1 08-04-2004 03:11 AM



Advertisments