像遍历一维数据结构一样遍历多维数据结构
博客专区 > 沙枣 的博客 > 博客详情
像遍历一维数据结构一样遍历多维数据结构
沙枣 发表于3年前
像遍历一维数据结构一样遍历多维数据结构
  • 发表于 3年前
  • 阅读 15
  • 收藏 0
  • 点赞 0
  • 评论 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 { ... }
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 21
博文 100
码字总数 186883
×
沙枣
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: