ruby - 递归数组有什么用?

标签 ruby arrays recursion

Ruby 支持递归数组(即自包含数组):

a = []
# => [] 
a << a
# => [[...]] 
a.first == a
# => true 

这本质上很酷,但是您可以用它做什么工作?

最佳答案

A directed graph具有未分化边的每个顶点可以简单地表示为从该顶点可到达的顶点数组。如果图形有循环,你就会有一个“递归数组”,尤其是当一条边可以回到同一个顶点时。

例如这张图:
directed cyclic 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/

相关文章:

django - 使用 celery 更新 Django 模型字段时避免递归 save()

ruby-on-rails - rails mongoid 清晰的标准

php - 如何在mysql select查询中传递数组值

ruby-on-rails - Capistrano 3 错误 - extconf.rb :29:in `<main>' : The "libxml2" package isn't available. (RuntimeError)

ruby - 使用可枚举的内置 Ruby 访问和操作嵌套数据

arrays - Swift 2.2 和 3.0 之间的语法变化

JavaScript 递归 : Get the length of an array using recursion without accessing its length property

c - 递归二叉树插入

ruby - String.next 有反义词吗?

ruby-on-rails - 不对所有记录重新索引时,Searchkick不同的重新索引结果