Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ruby中查找哈希是如何工作的?_Ruby_Hash - Fatal编程技术网

在Ruby中查找哈希是如何工作的?

在Ruby中查找哈希是如何工作的?,ruby,hash,Ruby,Hash,Ruby如何在散列中查找键?我认为只要它在散列中找到一个键,它就会返回它的值,而不计算其他键/值对?但我想我错了。 例如 现在,如果我执行测试[“a”],它会返回错误,因为d的无穷大值,如果我删除“d”,它会正常工作(这意味着它会检查所有键/值对,即使它在第一个键中找到匹配项)。因此,如果我在一个非常大的散列中搜索一个键,Ruby会在返回该散列的值之前评估每个键/值的有效性吗?如果是这样的话,有没有一种方法可以在找到密钥后立即跳出散列 更新 我只是想澄清一下,我试图理解它在Ruby中是如何工作的

Ruby如何在散列中查找键?我认为只要它在散列中找到一个键,它就会返回它的值,而不计算其他键/值对?但我想我错了。 例如

现在,如果我执行
测试[“a”]
,它会返回错误,因为d的无穷大值,如果我删除“d”,它会正常工作(这意味着它会检查所有键/值对,即使它在第一个键中找到匹配项)。因此,如果我在一个非常大的散列中搜索一个键,Ruby会在返回该散列的值之前评估每个键/值的有效性吗?如果是这样的话,有没有一种方法可以在找到密钥后立即跳出散列

更新
我只是想澄清一下,我试图理解它在Ruby中是如何工作的。例如,如果我有一个包含500个键/值对的散列(都是有效的,不像1/0),那么让我们假设“a”是第一个键。因此,如果我对那个大散列进行测试[“a”],Ruby是在引擎盖下加载内存中的所有键/值对,还是在找到键“a”后突然出现错误?

当Ruby创建散列时,而不是在访问散列时,会出现错误-将值插入散列显然需要对它们进行评估


从散列中获取值时,不会进行“加载”:整个散列始终在内存中。对哈希表的完整解释有点超出了范围,但简而言之,哈希的工作原理是对ruby从中派生的键进行哈希,哪个哈希桶应该包含该值。然后搜索该bucket,如果找到该键,则返回该值

我在尝试运行初始化时出错。1/0在哈希创建时计算。。。您使用的是哪个版本的ruby?irb(main):001:0>test={“a”=>10,“b”=>20,“c”=>30,“d”=>1/0}ZeroDivisionError:除以0 from(irb):1:in
/'from(irb):1 from/Users/za/.rbenv/versions/2.3.0/bin/irb:11:in
'这里同样,它抛出了一个异常。。您使用的是哪个版本的ruby?我使用的是Railsinstaller附带的ruby版本2.2.4。
test = {"a" => 10, "b" => 20, "c" => 30, "d" => 1/0}