我有一个类似这样的 Ruby 哈希表:
h = {"side1"=>["green", "Green"], "side2"=>["verde", "Verde"]}
我该如何在哈希表中获取特定键的第一个(或最后一个)元素?
h = {"side1"=>["green", "Green"], "side2"=>["verde", "Verde"]}
我该如何在哈希表中获取特定键的第一个(或最后一个)元素?
实际上,你在问题中给出的伪代码是正确的。
针对你的哈希表
h = {
"side1" => ["green", "Green"],
"side2" => ["verde", "Verde"]
}
这些键是'side1'
和'side2'
(它们的值在哈希箭头的右边)
因此,h['side2'].first
表示对于键'side2'
的值,获取值["verde", "Verde"]
中的第一个元素,它是一个数组。h['side2'][0]
也可以使用。别名first
是一个方便的方法。
要获取数组的最后一个元素而不必知道其大小,请使用负索引。例如:h['side2'][-1]
,在这种情况下等同于h['side2'][1]
。
请注意,哈希中的键对字符串或符号有特定的要求。例如h[:side2]
将返回nil,因为尚未设置该键。Rails有一个HashWithIndifferentAccess
类,将符号和字符串视为等效的键。
编辑
我应该提到我在irb
中测试了我的答案。 irb
是测试您的想法是否可行的好方法。在终端提示符中,输入irb
,然后回车,使用ruby进行编程实验。
我遇到了一个类似的情况,我需要从哈希表中随便获取“第一个”条目来进行测试代码。这并不完全是这个问题所涉及的,但在我搜索时出现了这种情况,因此我认为它可能也会对其他人有用。
当然,在哈希表中,“第一项”是任意的,但是keys方法将返回按某种魔法排序的所有键的列表。如果您喜欢这种排序顺序,那么您可以使用“first”方法来获取第一个元素。
h[h.keys.first]
hash.values.first
hash.values.last
hash.keys.first
hash.keys.last
是的。puts h["side2"].first
应该可以工作。我猜这表明Ruby遵循最少惊奇原则,你的伪代码实际上与实际代码相同。 :-)
puts h['side2].first
是完全有效的语法。puts h['side2][0]
也可以工作。 - Victor Deryaginirb
中发现答案所花费的时间比在StackOverflow上输入问题要少。 - Mark Thomas