ruby如果散列键包含文本,则返回散列键
我有一个这样的杂凑:ruby如果散列键包含文本,则返回散列键,ruby,hash,Ruby,Hash,我有一个这样的杂凑: hash={2013=>one',2014=>two'} 和一个变量编号: number=13 我需要搜索我所有的散列键,如果键中包含number,我需要返回该键。现在我有这个: if hash.keys.any? {|k| k.include? number} #do some work end 这是可行的,但是如果k包含number,我实际上需要返回k,而不仅仅是检查它。我怎样才能像上面那样用块“如果”格式轻松地写出来。使用find: if result = ha
hash={2013=>one',2014=>two'}
和一个变量编号:
number=13
我需要搜索我所有的散列键,如果键中包含number
,我需要返回该键。现在我有这个:
if hash.keys.any? {|k| k.include? number}
#do some work
end
这是可行的,但是如果k
包含number
,我实际上需要返回k
,而不仅仅是检查它。我怎样才能像上面那样用块“如果”格式轻松地写出来。使用find
:
if result = hash.keys.find {|k| k.include? number}
#do some work
end
例如,如果number=13
,则块中的kv==[2013,“一”]
。如果未找到,则kv
为nil
,并跳过该块。您希望将两个值转换为字符串,然后只需检查一个字符串是否包含另一个字符串。大概是这样的:
hash.keys.select {|key| key.to_s.include? number.to_s }
您的意思是要检查键的字符串表示形式是否包括数字的字符串表示形式吗?您的代码段引发了一个错误(string vs fixnum)请查看Array.find:`hash.keys.find{| k | k.to|s.include?number.to_s}当您说“include”时,是指作为子字符串吗?像2013
“包含”13
?在这种情况下,如何获取密钥?我需要能够使用我的#do some work blockAh中的键,这很简单…谢谢,很抱歉造成混淆。+1我很喜欢使用[…]
字符串来查找子字符串。但是我不喜欢看到如果kv=…
那么-1。不,我只是发现一个潜在的故障点和维护问题,并将在代码审查中标记它。
hash.keys.select {|key| key.to_s.include? number.to_s }