加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl是否具有可以包含任何类型键的关联数组类型?

发布时间:2020-12-15 21:46:41 所属栏目:大数据 来源:网络整理
导读:似乎Perl只能将字符串作为哈希的键. (在某个版本的Perl中是否已经更改了?)仅限于能够使用字符串作为键是非常有限的.如果我想要一个对象或一个数组作为关键怎么办?在 Python中,很容易使用数组,元组和其他可以比较的对象,如dict键. Perl确实能够比较数组之类
似乎Perl只能将字符串作为哈希的键. (在某个版本的Perl中是否已经更改了?)仅限于能够使用字符串作为键是非常有限的.如果我想要一个对象或一个数组作为关键怎么办?在 Python中,很容易使用数组,元组和其他可以比较的对象,如dict键. Perl确实能够比较数组之类的东西是否相等,所以我不明白为什么它们不能用作映射类型键.

是不是有办法在Perl中使用任何键类型?有没有提供此功能的模块?

解决方法

与你所说的相反,Perl没有能力像你声称的那样比较像数组这样的东西.首先,Perl没有数组相等的定义.如果定义需要比较数组的内容,那么Perl对于大多数可以在数组中找到的东西都没有相等的定义.

最接近的Perl对于相等数组的定义是它们的地址.如果这是你想要使用的,那么它很容易:

$key = ['a','b'];
$hash{$key} = [ $key,$val ];   # Prevents the key from being freed.
print $hash{$key}[1];

否则,Perl会让你实现你想要的,而不是强迫你使用它提供的东西.我看到两种主要方法.

绑定哈希,基本上是代码,它提供哈希的接口而不实际是哈希表,可以支持任何密钥类型.您可以使用它来定义数组相等的版本.甚至可能有一个现有的模块(虽然我很快就没有看到一个模块).

另一种方法是创建一个从键表达式生成唯一键的函数.

sub key{ "@_" }  # Overly simplistic?
$hash{key('a','b')} = $val;
print $hash{key('a','b')};

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读