【发布时间】:2018-10-07 15:05:17
【问题描述】:
在 Hash 文档中,Object keys 部分似乎暗示您可以使用任何类型作为 Hash 键,只要您指出,但我在尝试使用数组作为键时遇到问题:
> my %h{Array};
{}
> %h{[1,2]} = [3,4];
Type check failed in binding to parameter 'key'; expected Array but got Int (1)
in block <unit> at <unknown file> line 1
可以这样做吗?
【问题讨论】:
-
如果您将
%h{[1,2]} = [3,4];更改为%h{item [1,2]} = [3,4];,它会阻止数组扩展为切片并将其保留为数组,以便用作键。 -
@callyalater: 是的,但它没有多大用处:-(。见我的回答。
-
@raiph 对于我的用例,我可以保证输入将是整数,因此使用
Set([1,2])或~[1, 2]可以完美地满足我的需求。.perl看起来很有趣,但我不确定在正常开发过程中实际使用它的频率。 -
谢谢。我删除了我之前建议
~的评论和答案,但你大概知道我的答案从~前缀演变为.perl后缀。这是因为,afaik,除了简洁之外,它至少与其他两种 hack 一样好,并且在许多情况下比其他两种 hack 更好,即根据 Liz 的建议,常规字符串化 (~) 或.Set。.perl区分[1,2]和[2,1],.Set不区分<<'a a' 'b'>>和<<'a' 'a b'>>,常规字符串化(使用~)不区分。 Anyhoo,正如您所说,如果您的所有数组/列表元素都是整数,~将可以正常工作。 -
@raiph 我也认为向后来的答案寻求者表明答案是否很重要,您不能直接使用数组作为哈希键,因为伊丽莎白的回答中对此进行了解释。
标签: arrays hash hashmap key raku