Ruby递归迭代多层嵌套的hash以及数组

Ruby有这样一个hash:

{
  :key1 => 'value1',
  :key2 => 'value2',
  :key3 => {
    :key4 => [{:key4_1 => 'value4_1', :key4_2 => 'value4_2'}],
    :key5 => 'value5'
  },
  :key6 => {
    :key7 => [1,2,3],
    :key8 => {
      :key9 => 'value9'
    }
  }
}

在这个数据结构里,既存在hash结构,也存在数组结构。

递归迭代方法:

def iterate(h)
  h.each do |k,v|
    value = v || k

    if value.is_a?(Hash) || value.is_a?(Array)
      iterate(value)
    else
      puts v ? "key: #{k} value: #{v}" : "array value #{k}"
    end
  end

版权声明:著作权归作者所有。

相关推荐

你需要知道的6个Ruby数组方法

数组是编程的基本结构之一,这里介绍6个Ruby操作数组的方法。Map/Each这两种方法非常相似。 它们让我们对数组的每一项执行操作。示例:array = [1, 2, 3] effects = array.each{|x| # 根据x求值 } added = array.map

PHP递归删除多级目录

php删除文件夹需要结合三个函数:glob:用于遍历文件unlink:删除文件rmdir:删除空文件夹<?php  public static function recursiveDelete($dir) {      $dir = rtrim($dir,'/');     

Ruby调用shell脚本总结

Ruby可以使用以下几种方法来执行shell脚本。1、使用反引号``调用shell脚本语法`cmd` 返回命令的结果示例`echo "hello"` 2、内置语法%x( cmd ) 其中%x后面为分隔符,上面使用了(作为分隔符,当遇到收括号即表示命令结束。这些分隔符可以为[,{等。示例%x( echo 'hello' 

Kotlin:数组的基本操作

Kotlin使用Array类来表示数组,构造函数为:<init> Array(size: Int, init: (Int) -> T) size:数组大小init:初始化数组创建数组Kotlin提供了几种方法方便我们创建数组,包括:构造函数,标准库提供的arrayOf, arrayOfNulls 和emptyArray等 。构造函数// 创建 一个值

JavaScript使用for...in迭代数组分析(不推荐)

for...in与其说是迭代,更恰当的说法应该是枚举。其目的是用来枚举object对象的属性,包括对象所继承的属性。有部分人会使用for...in来迭代数组,这是一种误用。以下对使用for...in迭代数组分析。问题一var a = ['a','b']; a[5] = 'e'; for (var x in a

Java Objects.hash()与自己实现的hashCode()比较

Java 7新增了Objects类,它为对象提供了一些便捷的静态方法,如equals(),hashCode(),hash(),compare(),toString()等等。这里比较一下Objects.hash()与自己实现的hashCode()。传统实现的hashCode@Override public int hashCode() {  &nbs