hof*_*ffm 30 ruby arrays recursion
Ruby支持递归数组(即自包含数组):
a = []
# => []
a << a
# => [[...]]
a.first == a
# => true
Run Code Online (Sandbox Code Playgroud)
这本质上很酷,但你可以用它做什么工作?
Phr*_*ogz 43
甲向图未分化边缘可以简单地表示为从该顶点到达的顶点数组的每个顶点.如果图形具有周期,则会有一个"递归数组",特别是如果边可以返回到同一个顶点.
例如,此图表:

...可以在代码中表示为:
nodes = { a:[], b:[], c:[], d:[] }
nodes[:a] << nodes[:a]
nodes[:a] << nodes[:b]
nodes[:b] << nodes[:a]
nodes[:b] << nodes[:c]
p nodes
#=> {:a=>[[[...], []], [...]], :b=>[[[...], [...]], []], :c=>[], :d=>[]}
Run Code Online (Sandbox Code Playgroud)
通常,每个顶点的表示将更加"健壮"(例如,具有名称和传出边数组属性的类实例),但是想象一个你想要一个非常轻量级的数据表示的情况并非不可能(非常大图)所以需要使用像这样的最小表示.
Ruby支持递归数组
对我来说,问题是它为什么不支持它?
Array只是引用的集合.如果其中一个元素引用了集合本身,它应该检查每个元素并抛出一个错误,所以要防止递归或将它用于像Phrogz这样的图形.
所以我不认为它是一个功能,但如果它是,我知道的大多数语言都有它,甚至是Java ..只需使用Object作为数组元素.