大佬教程收集整理的这篇文章主要介绍了ruby – 如何检测递归数组和散列?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
>最简单的递归数组实例
a = [] a[0] = a a # => [[...]]
>递归周期/深度不是一个
b = [[],:foo] b[0][0] = b b # => [[[...]],:foo]
>非根级别的递归
c = [a,:foo] c # => [[...],:foo]
这是一个不错的方式,迭代所有内容并保持您看到的对象的哈希值(用于快速查找)
class Object def is_recursive?(known = {}) false end end module Enumerable def is_recursive?(known = {}) return true if known.include?(self) known[self] = true begin any? do |*args| args.any?{|item| item.is_recursive?(known)} end ensure known[self] = false end end end x = []; x << x p x.is_recursive? # => true p ({x => 42}).is_recursive? # => true p [{foo: x}].is_recursive? # => true p [[[[[[:foo],{Bar: [42]}]]]]].is_recursive? # => false
请注意,这有点粗糙,你可能遇到麻烦.例如,你有[1..Float :: INFINITY] .is_recursive?的无限循环,虽然这很容易用
class Range def is_recursive?(known = {}) false # optimization end end
以上是大佬教程为你收集整理的ruby – 如何检测递归数组和散列?全部内容,希望文章能够帮你解决ruby – 如何检测递归数组和散列?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。