Ruby向哈希表中添加元素

3
我有两个问题,如果有任何疑惑,请提前谅解。我正在尝试将用户输入放入一个空哈希表中。我知道对于数组,您可以使用<<将信息推送到其中。是否有相当于此的哈希等效项?
第二部分:假设我只是循环同样的问题,直到满足某个条件。用户输入将是值。是否有一种方法/方法可以根据用户输入自动更改键?所以它看起来可能是这样的: {str1 => "示例字符串",str2 => "示例字符串2",str3 => "示例字符串3"}
或者是否有一种方式让Ruby自己分配一个键?
如果第二部分仍然不清楚,请再次道歉。我知道数组会更好,但我正在解决一个要求使用哈希表的小挑战。

3
为什么你想将它存储到哈希表中呢?看起来你并不关心键,那为什么不将值存储在数组中呢? - Bustikiller
关于您的第二个问题,如果用户提供了arr = ["cat9", "dog12"],其中包含唯一的数字部分,您可以编写以下内容:my_hash = arr.each_with_object({}) { |s,h| h["str#{ s[/\d+\z/] }"] = s } #=> {"str9"=>"cat9", "str12"=>"dog12"}。关于您的第一个问题,您可以在类Hash上定义一个方法<<,该方法将按您想要的方式运行:class Hash; def <<((k,v)); self[k] = v; end; end。然后对于上面的哈希表my_hashmy_hash << ["str40", "pig40"]; hash #=> {"str9"=>"cat9", "str12"=>"dog12", "str40"=>"pig40"} - Cary Swoveland
欢迎来到 Stack Overflow。您可以改进您的问题。请阅读 如何提问,包括链接“如何聪明地提问”。 - zhon
5个回答

3

向 Ruby 哈希表中添加元素的另一种方法是使用 store(key, value)

hash = {}
hash.store("first", 42)
hash #=> {"first"=>42}

2

使用数组时,你可以使用<<来添加单个元素。

而使用哈希表时,则需要同时追踪两个元素(键和值)。

例如:

my_key = "foo"
my_val = "bar"
my_hash = {}
my_hash[key] = val

当然,你可以使用循环来实现这个功能。

我建议学习更多关于此的内容可以去RubyMonk网站,但是他们的网站已经关闭。所以,我可以推荐这个代码片段,其中展示了一些示例,或者简单地阅读任何Ruby教程中的哈希表部分。


0

下面介绍两种向Hash添加元素的方法

hash[str1] = "example string"
hash.merge!(str1 => "example string")

0

如果您不关心在键上进行索引,因为哈希本质上是一个键/值存储,那么您可能想要一个Set

require 'set'

set = Set.new

set << gets.chomp

集合就像无键哈希表,它是一个无序的事物集合,但是查找集合中元素的速度较快,并且它们会自动去重,重复添加相同的元素没有任何效果。

另一种方法是将某个东西放入哈希表中,值作为键,任何其他值作为占位符:

values = { }

values[input.gets] = true

这类似于一个Set,但如果您不关心值,使用起来可能效率较低。


0

好的,它不是数组,所以'<<'不能工作。

你应该使用这个:

your_hash = {}
hash_key = "x"
hash_value = "y"
your_hash[:hash_key] = hash_value

就是这样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接