从一个数组中提取出另一个数组的值

3
我有一个这样的数组:
records =
[
 ["a","1"],
 ["b","2"],
 ["c","3"]
]

我想要获取数字3,已知我正在搜索“c”的值。

我尝试过这个方法但没有成功。

search_for = 'c'

test = records.select{ |x| x=search_for}

我获得了整个数组

6个回答

6

您正在寻找 Array#assoc 方法:

records.assoc(search_for).last

4
不错,但你忘记加 .last 了。我建议你写成 records.assoc('c').last => "3"。当你看到这条信息后,我会删除此评论(不需要回复)。此方法的链接为 http://ruby-doc.org/core-2.2.0/Array.html#method-i-assoc 。 - Cary Swoveland
谢谢,我更喜欢这种方式而不是将其更改为哈希表。感谢@CarySwoveland的修复! - RenaissanceProgrammer
@CarySwoveland,非常感谢您的修复。如果您能够在链接中留下您的评论,那就太好了。 - seph

2
你可以将数组转换为哈希表,然后像这样获取值:
search_for = 'c'
test = Hash[records][search_for]   #=> "3"

您可以考虑使用.key?来检查键是否存在。

谢谢您的建议,我对 Ruby 还不是很熟悉,.key 是什么? - RenaissanceProgrammer
@RenaissanceProgrammer:它检查哈希表中是否存在该键。 - potashin
Hash.key?(k)Hash.has_key?(k) 以及 Hash.include?(k) 是相同的功能。 - Cary Swoveland

2

这不一定是最干净或最通顺的方法,但这是另一种方式:

records.find { |x, y| break(y) if x == "c" }

换句话说,给定一组成对的数组 x, y查找第一个满足 x == "c" 的对,并返回其 y 值。


太棒了,我真的很喜欢这个答案,因为它足够直观,可以理解当数组具有超过2个值时该怎么做,以及如果我尝试提取的值不是像seph的答案中的.last那样。 - RenaissanceProgrammer

1
test = records.select{ |x| x[0] == search_for }
value = test[0][1]

0
records.find { |f,_| f == 'c' }.last #=> 3

-1
你可以使用Array#include?(value):
例如:
a = [1,2,3,4,5]
a.include?(3)   # => true
a.include?(9)   # => false

很抱歉,但这不是我问题中所问的东西。a)它没有返回值,b)我一开始就不知道这个值,只知道关联的键,因此“假设我知道我正在搜索'c'”,所以如果我不知道它是否包含在内,我就无法检查。 - RenaissanceProgrammer

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