热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用整数作为哈希键是否安全?

如何解决《使用整数作为哈希键是否安全?》经验,为你挑选了1个好方法。

使用整数作为哈希键是否安全?

my %hash;
my $str = ...

for $str.NFC {
    %hash{$_} = ...
}

smls.. 5

一个正常的Hash胁迫其所有键的字符串:

my %a = '1' => 'foo', 2 => 'bar';

say %a.pairs.perl;  # ("1" => "foo", "2" => "bar").Seq

注意第二个键如何成为字符串"2",即使它最初作为整数传递给Hash.
当您进行哈希查找时,下标在使用之前也会自动转换为字符串:

say %a{"2"}.perl;   # "bar"
say %a{2}.perl;     # "bar"

注意下标如何2正确地找到带键的元素"2".

在Perl 6中定义了从整数到字符串的转换,为每个唯一的整数生成一个唯一的字符串,因此您给出的示例很好.


如果您希望将哈希键转换为字符串,则可以使用{}声明中的表示法覆盖键处理:

my %b{Any} = '1' => 'foo', 2 => 'bar';

say %b.pairs.perl;  # ("1" => "foo", 2 => "bar").Seq

say %b{"1"}.perl;   # "foo"
say %b{1}.perl;     # Any

say %b{"2"}.perl;   # Any
say %b{2}.perl;     # "bar"

注意在这种情况下,第二个键如何2保持整数,并且使用字符串下标进行"2"查找时找不到它,下标也没有找到1带键的条目"1".

%b{Any}意思是"接受任何类型的钥匙,不要强迫它们".这有时称为" 对象哈希 ",因为它可以从任何对象映射到值.

%b{Int}意思是"只接受Int钥匙,不要强迫他们".在这种情况下,如果您甚至尝试使用任何尚未使用的内容,您将收到错误消息Int.



1> smls..:

一个正常的Hash胁迫其所有键的字符串:

my %a = '1' => 'foo', 2 => 'bar';

say %a.pairs.perl;  # ("1" => "foo", "2" => "bar").Seq

注意第二个键如何成为字符串"2",即使它最初作为整数传递给Hash.
当您进行哈希查找时,下标在使用之前也会自动转换为字符串:

say %a{"2"}.perl;   # "bar"
say %a{2}.perl;     # "bar"

注意下标如何2正确地找到带键的元素"2".

在Perl 6中定义了从整数到字符串的转换,为每个唯一的整数生成一个唯一的字符串,因此您给出的示例很好.


如果您希望将哈希键转换为字符串,则可以使用{}声明中的表示法覆盖键处理:

my %b{Any} = '1' => 'foo', 2 => 'bar';

say %b.pairs.perl;  # ("1" => "foo", 2 => "bar").Seq

say %b{"1"}.perl;   # "foo"
say %b{1}.perl;     # Any

say %b{"2"}.perl;   # Any
say %b{2}.perl;     # "bar"

注意在这种情况下,第二个键如何2保持整数,并且使用字符串下标进行"2"查找时找不到它,下标也没有找到1带键的条目"1".

%b{Any}意思是"接受任何类型的钥匙,不要强迫它们".这有时称为" 对象哈希 ",因为它可以从任何对象映射到值.

%b{Int}意思是"只接受Int钥匙,不要强迫他们".在这种情况下,如果您甚至尝试使用任何尚未使用的内容,您将收到错误消息Int.


推荐阅读
author-avatar
手浪用户2602890763
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有