Ruby 支持递归数组(即自包含数组):
a = []
# => []
a << a
# => [[...]]
a.first == a
# => true
这本质上很酷,但是您可以用它做什么工作?
最佳答案
A directed graph具有未分化边的每个顶点可以简单地表示为从该顶点可到达的顶点数组。如果图形有循环,你就会有一个“递归数组”,尤其是当一条边可以回到同一个顶点时。
例如这张图:
...可以用代码表示为:
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=>[]}
通常每个顶点的表示会更“稳健”(例如,具有名称属性和出边数组属性的类实例),但并非不可能想象您想要非常轻量级的数据表示的情况(对于非常大的图),因此需要使用像这样的最小表示。
关于ruby - 递归数组有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10606734/