[ruby-it] Hash con due elementi come chiave

Tucano tucano a recipient.cc
Dom 7 Dic 2008 15:11:04 CET


Magari complico solo la situazione, ma perche non usi un grafo per  
rappresentare le strade tra le citta'?

Nello specifico dovrebbe essere un grafo direzionato con le citta'  
come nodi (vertici) e le distanze in kilometri sono attributi degli  
edges

Ho trovato questa libreria in Ruby: http://rgl.rubyforge.org/rgl/index.html

tipo:

 >> require 'rgl/adjacency'
 >> dg=RGL::DirectedAdjacencyGraph["Milano","Roma","Roma","Milano"]
=> #<RGL::DirectedAdjacencyGraph:0x5aa500  
@vertice_dict={"Roma"=>#<Set: {"Milano"}>, "Milano"=>#<Set:  
{"Roma"}>}, @edgelist_class=Set>
 >> dg.vertices
=> ["Roma", "Milano"]
 >> dg.edges
=> [#<RGL::Edge::DirectedEdge:0x5a5a78 @target="Milano",  
@source="Roma">, #<RGL::Edge::DirectedEdge:0x5a5910 @target="Roma",  
@source="Milano">]


Siccome il grafo e' direzionato abbiamo entrambi gli edges (quindi  
distingue tra roma-->milano e milano-->roma).

A questo punto non ti rimane che attaccare agli edges un attributo (la  
distanza in kilometri)

La cosa interessante e' che, essendo un grafo, ci puoi applicare una  
serie di interessanti metodi di ricerca, sorting, shortest paths, etc...

ciao

Il giorno 05/dic/08, alle ore 14:36, Njna Njna ha scritto:

> ciao a tutti, ho il seguente hash
>
> @strade = Hash([])
>
> nel quale associo ad una coppia di citta i kilometri
>
> esempio @strade[["milano","roma"]] = [650, 800]
> vuolre dire che ci sono due strade da milano a roma, una di 600 km e  
> una
> di 800 km.
>
> in un controllo ho notato che il sistema non fa distinzione tra
> @strade[["milano","roma"]] e @strade[["roma","milano"]] e ho bisogno  
> che
> siano due cose distinte, anche perchè ci possono essere ulteriori  
> strade
> e ulteriori kilometri.. come posso fare?
>
>
> grazie a tutti
> -- 
> Posted via http://www.ruby-forum.com/.
> _______________________________________________
> Ml mailing list
> Ml a lists.ruby-it.org
> http://lists.ruby-it.org/mailman/listinfo/ml
>



More information about the Ml mailing list