Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.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,我有一个这样的杂凑: 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 }