元组作为 ets 表的键?

Posted

技术标签:

【中文标题】元组作为 ets 表的键?【英文标题】:Tuple as Key for ets table? 【发布时间】:2016-11-22 02:37:51 【问题描述】:

我想在 ETS 表中存储有关其他网络参与者信息的元组。 我想使用 ip_address(), port_number() 的元组(inet:peername(Socket) 的返回作为条目的键。我想使用地址/端口的组合作为 ETS 表中其他节点/条目的标识符。

这可以用 ets 实现吗?还是我必须使用其他类型作为键?

【问题讨论】:

你的意思是像ets:insert(Table, "127.0.0.1", 4000, value).?这似乎工作正常。 更像ets:insert(Table, 0,0,0,0,0,0,0,1, 4000, value).。它对我来说似乎也很好用。然而,我最近遇到了一些奇怪的错误,找不到有关是否可以使用元组的信息。我可以想象,也许 erlang 会混淆它应该将哪个嵌套元组视为键。 这也应该没问题。也许添加一些相关的代码和你得到的确切错误。 【参考方案1】:

ETS 代表“Erlang Term Storage”,它可以存储任何 Erlang 术语,包括元组和元组的元组。 the ets man page 的描述部分详细说明了如何比较和匹配特定表类型的术语,ets:lookup/2 的文档也讨论了这一点。对于某些表类型,Erlang term order 很重要。

对于存储元组的哪一部分是键没有混淆;用于创建表的ets:new/2 function 包括用于指示关键元素的keypos, Pos 选项。如果没有提供keypos, Pos,则第一个元素是key。

【讨论】:

ETS 代表“Erlang Term Storage”,它可以存储任何 Erlang 术语,包括元组...--来自ets docs : 数据被组织成一组动态表,可以存储元组。 -- 来自LYSE:所有 ETS 表都本地存储 Erlang 元组,其中包含您想要的任何内容,其中一个元组元素将充当主键..--听起来像是唯一的数据类型ets 可以存储的是一个元组(元组中包含任何其他数据类型)。这是真的吗? 关于表存储,是的,都是元组。但是元组对表用户的意义是不同的。在一种情况下,存储的元组是对用户有意义的整个值;例如,如果元组真的是一条记录,那么整条记录就是用户感兴趣的值,一个字段是键。另一种情况涉及不同但明确配对成元组的键和值,因为这是 ets 需要的。这种情况包括作为它们自己的键的值,它们显式地放置在元组中以满足 ets,例如 42"foo"

以上是关于元组作为 ets 表的键?的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中,我可以使用元组作为字典中的键吗?

返回与字典中第三个值最小的元组对应的键

python面试题总结

Javascript:使用元组作为字典键

如何更新存储在 ets 表中的元组中的数字?

Python 为啥list不能作为字典的key