ruby - Ruby 相当于 Python 的 hash() 是什么?
问题描述
假设我有一个Array
: ['a', 'b', 'c']
。我想记录我以前是否看过一个特定的数组。
我可以将数组放在 a 中Set
,但是如果我不需要存储数组的内容,那是很浪费的,只是我以前见过它。
在 Python 中,我可以散列一个元组(即hash(('a', 'b', 'c'))
)并将结果存储在一个集合中来实现这一点。在 Ruby 中执行此操作的方法是什么?
解决方案
Ruby#hash
在大多数对象上都有,包括 Array,但这些值不是唯一的,最终会发生冲突。
对于任何严肃的用途,我强烈建议使用 SHA2-256 或更强的东西,因为这些是旨在最大限度地减少冲突的加密哈希。
例如:
require 'digest/sha2'
array = %w[ a b c ]
array.hash
# => 3218529217224510043
Digest::SHA2.hexdigest(array.inspect)
# => "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
该值将相对独特。SHA2-256 冲突非常罕见,因为该散列的绝对大小是 256 位与 64 位#hash
值。这不是强 4 倍,而是强6.2倍。考虑到其中有 57 个零,这个数字也可能是“数以万计”。
推荐阅读
- django - 如何使用条带处理异常
- typescript - 类型的打字稿问题
- dataframe - Pyspark - 在数据框中用 0 填充空白月份
- sql - 如何获得此 JSON 输出?
- java - 无需扩展的 Java Swing
- arrays - 如何在struct Swift中获取数组的firstindex
- python - 在 matplotlib 中用作不同颜色标记的绘画数字
- c++ - push_back 比 emplace_back 更高效?
- teradata - Snowflake CASE 语句使用文件格式?
- c# - Caliburn.Micro MVVM WPF - 在用户编辑 DataGrid 时启用按钮,否则禁用它