的一種方式頂點列表將被使用.times
,這似乎有點笨拙,但創建一個列表(我增加了一個:id
值):
t_verts = []
9.times do t_verts << Vertex.new end
[10] pry(main)> t_verts
=> [#<struct Vertex parent=nil, rank=nil, id=nil>,
#<struct Vertex parent=nil, rank=nil, id=nil>,
#<struct Vertex parent=nil, rank=nil, id=nil>,
#<struct Vertex parent=nil, rank=nil, id=nil>,
#<struct Vertex parent=nil, rank=nil, id=nil>,
#<struct Vertex parent=nil, rank=nil, id=nil>,
#<struct Vertex parent=nil, rank=nil, id=nil>,
#<struct Vertex parent=nil, rank=nil, id=nil>,
#<struct Vertex parent=nil, rank=nil, id=nil>]
這將創建不同的對象。
[11] pry(main)> t_verts.each do |vert|
[11] pry(main)* vert.id = rand
[11] pry(main)* end
=> [#<struct Vertex parent=nil, rank=nil, id=0.755245226082449>,
#<struct Vertex parent=nil, rank=nil, id=0.0167377598961559>,
#<struct Vertex parent=nil, rank=nil, id=0.759799975185007>,
#<struct Vertex parent=nil, rank=nil, id=0.613897002692335>,
#<struct Vertex parent=nil, rank=nil, id=0.0407847317079812>,
#<struct Vertex parent=nil, rank=nil, id=0.549475744759297>,
#<struct Vertex parent=nil, rank=nil, id=0.571876769381891>,
#<struct Vertex parent=nil, rank=nil, id=0.270800829904956>,
#<struct Vertex parent=nil, rank=nil, id=0.814754555208641>]
爲了集體添加這些到圖形,Simone的方法可以用來頂點的列表添加到圖表:
def add_vertex(new_verts) # Adds or updates vertexes non-destructively
new_verts.each do |new_vert|
# first case, redundant insert
if self.vertexes.include?(new_vert)
warn "Vertex already exists in graph, no replacement done"
# second case, update
elsif not (update_vert = self.vertexes.select { |vert| vert.id == new_vert.id }).empty?
self.vertexes[self.vertexes.index(update_vert)] = new_vert
# third case, append new
else
self.vertexes ||= []
self.vertexes << vertex
end
end
end
它看起來像我需要建立一個建立一個構造函數方法來自鄰接列表和權重列表的圖形;我沒有看到一個簡單的方法來完成這一步。
所以,我只需要編寫一個函數,它需要一個父類和行列的數組來創建用於填充測試圖的頂點?看起來過於複雜。 –
我更新了一下我的代碼。我並不完全明白你想要達到的目標,但我舉了一個例子來給你一些基本的想法。 –
我嘗試過使用上面給出的附加方法,但它似乎解開了輸入;我最終在'a_graph.edges'中得到了一個平坦的數組,並在每個Vertex中存儲了每個值。 –