美文网首页Raku Programming Language
Perl 6 中散列的键和值

Perl 6 中散列的键和值

作者: 焉知非鱼 | 来源:发表于2018-04-13 10:49 被阅读12次

Perl 6 中散列的键和值

今天,我们将看看 Hash 类的几个返回散列所有键或值或同时返回键和值的方法:

> my %h = H => 'Hydrogen', He => 'Helium', Li => 'Lithium';
{H => Hydrogen, He => Helium, Li => Lithium}

> %h.keys;
(H Li He)

> %h.values;
(Hydrogen Lithium Helium)

> %h.kv;
(H Hydrogen Li Lithium He Helium)

虽然你可能想直接进入 src/core/Hash.pm6 文件来查看方法的定义,但你会一无所获。 Hash 类是 Map 的子类,所有这些方法都定义在 src/core/Map.pm6 文件中。获取键和值很简单:

multi method keys(Map:D:) {
    Seq.new(Rakudo::Iterator.Mappy-keys(self))
}

multi method values(Map:D:) {
    Seq.new(Rakudo::Iterator.Mappy-values(self))
}

对于 kv 方法, 需要多做点工作:

multi method kv(Map:D:) {
    Seq.new(class :: does Rakudo::Iterator::Mappy) {
        has int $!on-value;

        method pull-one() is raw {
            ...
        }
        method skip-one() {
            ...
        }
        method push-all($target --> IterationEnd) {
            ...
        }
    }.new(self)
}

如您所见,该方法返回一个使用了一个实现了 Rakudo::Iterator::Mappy 角色的匿名类构建的序列。我们已经看到了这种方法与定义 pull-onepush-all 方法是如何结合使用的。

让我们看看另一套方法,pairs 和 antipairs。其中之一简单明了:

multi method pairs(Map:D:) {
    Seq.new(self.iterator)
}

另外一个使用了中间类:

multi method antipairs(Map:D:) {
    Seq.new(class :: does Rakudo::Iterator::Mappy) {
        method pull-one() {
            ...
        }
        method push-all($target --> IterationEnd) {
            ...
        }
    }.new(self)
}

两种方法都产生相同结构的结果:

> %h.antipairs
(Hydrogen => H Lithium => Li Helium => He)

> %h.pairs
(H => Hydrogen Li => Lithium He => Helium)

相关文章

  • Perl 6 中散列的键和值

    Perl 6 中散列的键和值 今天,我们将看看 Hash 类的几个返回散列所有键或值或同时返回键和值的方法: 虽然...

  • 算法图解-散列表

    1. 散列表 散列表由键和值组成,散列表将键映射到值。 在复杂数据结构中,散列表可能是最有用的,也被称为散列映射、...

  • JS数据结构和算法 - 字典和散列

    前言 集合、字典和散列都可以存储不重复的值。但是集合我们存储的是 value、字典和散列存储的是[键, 值]对。但...

  • Perl语言学习(六)Perl哈希

    1、Perl哈希简介 什么是哈希英文名hash,也被称作散列是一种数据类型哈希有两部分组成:键(key)值(val...

  • Redis实战-Redis五种数据类型(四-4 散列)

    4.散列  Redis的散列可以让用户将多个键值对存储到一个Redis键里面。从功能上来说,Redis为散列值提供...

  • R语言中的哈希(hash in R)

    用过perl和Python的人一定会对字典、散列、哈希有印象,通过以对象去获得它的值,这在需要映射的时候非常有用。...

  • 3.4散列表

    3.4.1软缓存 如果散列的值计算时间很耗时,我们可以将每个键值的散列值缓存起来,即在每一个键中用一个hash变量...

  • 《Ruby基础教程》第四部分提取笔记

    ​ 散列类 新建hash:a = {} a = {键: 值}a = Hash.new(x) (这里可以设置一个默...

  • 散列

    散列值与相等性 等值对象的散列值必须相等。散列相等未必等值。 散列表算法 其他说明 key必须是可散列的。可散列需...

  • 《iOS面试题整理》 - 哈希表

    哈希表, 也叫散列表, 是数组的一种扩展把关键字或者键转换为数组下标的方法叫做散列函数散列函数计算得到的值也叫做散...

网友评论

    本文标题:Perl 6 中散列的键和值

    本文链接:https://www.haomeiwen.com/subject/icqckftx.html