文档章节

像遍历一维数据结构一样遍历多维数据结构

沙枣
 沙枣
发布于 2015/06/05 17:51
字数 340
阅读 16
收藏 0

最近处理一种嵌套数据结构,经常要遍历。我发现大部分的语言都不能"像 flatten 一样的遍历“,这种能力可以大大简化对数据结构的处理,虽然很多语言都有 iterator 这种东西。

如果一个数据是嵌套的数据结构,其中可能有 List, 也可能有 Hash, 如果要遍历所有的数据结构,并对其中的值进行处理,通常就需要对遍历到的东西进行判断,是否需要进一步的遍历,这会增加代码的复杂度,如果有一种抽象能把这种复合的数据结构抽象成一维的数据结构,就好象把多个扇区的硬盘抽象成一个一维数组一样。

用 Perl6 可以这样

use v6;

sub foreach($ast, &action) {
  for $ast.values <-> $value {
    if is-atom($value) {
      $value = &action($value);
      next;
    }
    $value<v> = foreach($value<v>, &action);
    $value = &action($value);
  }
  return $ast;
}

sub is-atom($ast) { $ast ~~ Hash and $ast<v> ~~ Str }

这样就能像遍历普通的一维数组一样,遍历这个数据结构,并且可以进行修改。

foreach $ast -> $value { ... }

© 著作权归作者所有

共有 人打赏支持
沙枣
粉丝 23
博文 148
码字总数 176652
作品 0
深圳
后端工程师
大象无形,大音希声

没有语法的语言就好像没有固定形状的工具一样,奇妙。由于传统的语言,lexer parser 和 ast compiler 耦合在一起,对语法的修改牵一发而动全身,本着向前兼容的遮羞布,而在一种固定的形式下...

沙枣
2016/11/15
14
0
Go 切片使用注意点

使用append 输出: 下图可以非常形象的说明上述代码的运行原理: image.png 仅做一点点小的改变,结果就不一样了: 以上代码会输出: 原因在于:当往 中新增元素的时候,由于其容量不够, 会...

Aaaaaaaaaaayou
01/27
0
0
jquery带有参照数据的效果处理

几个简单小例子: 1.入门二级联动 2.二级联动 3.三级联动 4.简繁体转换 5.简单答题 6.创建课程表模板 这些例子有个共同的原理,就是有一个写好的参考数据模型,通过这个参考处理!什么参考,...

透笔度
2015/09/18
68
0
C Primer Plus 第10章 数组和指针 10.2 多维数组

例如,气象员要分析5年中每月的降水量数据,首先需要解决的问题是如何表示这些数据。可以使用60个变量。或者使用一个60个元素的数组,或者使用5个数组,每个数组12个元素。这些方法都比较笨拙...

idreamo
2016/07/23
26
0
Python数据分析numpy基础-维度的认识

什么是多维数组? 核心对象是同型的多维数组(简单理解就是一个表格,通常内容都是些数字),具有相同的数据类型。 概念: 1. axes(轴):数组的维度统称为轴。 2. rank:轴的数量称为rank。...

十年磨一剑3344
07/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

nginx访问日志-日志切割-静态文件不记录日志和过期时间

nginx访问日志: vim /usr/local/nginx/conf/nginx.conf #搜索log_format 该字段定义日志格式,默认如下: #combined_realip日志格式的名字,可随意定义; 定义访问日志: 需在虚拟主机配置文...

ZHENG-JY
4分钟前
0
0
180.mariadb 主从复制

参考:https://blog.csdn.net/chengxuzaza/article/details/62042920 睡觉睡觉,明天写 1.效果 当主库中数据有变化的时候,从库就自动同步 2. 环境要求 至少两台 linux服务器 (教程:https...

Lucky_Me
14分钟前
0
0
erlng file id3v1 id3v1.1

%% ---%% Excerpted from "Programming Erlang",%% published by The Pragmatic Bookshelf.%% Copyrights apply to this code. It may not be used to create training material, %% ......

xueyuse0012
15分钟前
1
0
RabbitMq的安装

环境Centos6.5 32位 JDK 1.7.8 Jdk的卸载 rpm -qa|grep jdk yum –y remove 上边的安装包 JDK的安装 Rpm –ivh jdk安装包 配置环境变量 export JAVA_BIN=/usr/java/jdk1.7.0_80/bin export J......

DemonsI
19分钟前
0
0
http和https协议

HTTPS全称为Hypertext Transfer Protocol over Secure Socket Layer,中文含义为“超文本传输协议在安全加密字层”,简单来说就是加密数据传输,通俗的说就是安全连接。 HTTPS安全超文本传输...

寰宇01
25分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部