Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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
我可以做hash.has#u key吗?(';video';或';video2';)(ruby)_Ruby_Hash - Fatal编程技术网

我可以做hash.has#u key吗?(';video';或';video2';)(ruby)

我可以做hash.has#u key吗?(';video';或';video2';)(ruby),ruby,hash,Ruby,Hash,或者更好的是我可以做hash.has_key?('videox')其中x是 ”“什么也没有 一个数字 那么“video”、“video1”、“video2”会通过条件吗 当然,我可以有两个条件,但如果我将来需要使用video3,事情会变得更复杂…一种可能性: hash.values_at(:a, :b, :c, :x).compact.length > 1 如果您希望视频后跟一个数字的一般情况,而不显式列出所有组合,那么有几种方法可以与正则表达式结合使用 hash.keys是来自ha

或者更好的是我可以做hash.has_key?('videox')其中x是

  • ”“什么也没有
  • 一个数字
那么“video”、“video1”、“video2”会通过条件吗

当然,我可以有两个条件,但如果我将来需要使用video3,事情会变得更复杂…

一种可能性:

hash.values_at(:a, :b, :c, :x).compact.length > 1

如果您希望视频后跟一个数字的一般情况,而不显式列出所有组合,那么有几种方法可以与正则表达式结合使用

hash.keys
是来自
hash
的密钥数组,
^video\d$
匹配视频,后跟数字

# true if the block returns true for any element    
hash.keys.any? { |k| k.match(/^video\d$/ }

grep
还允许您在需要下一位代码的信息时捕获匹配的密钥,例如

if (matched_keys = hash.keys.grep(/^video\d$/)).size > 0
  puts "Matching keys #{matched_keys.inspect}"
此外,如果我们要查找的密钥前缀在变量中,而不是在硬编码字符串中,我们可以按照以下方式执行操作:

prefix = 'video'
# use an interpolated string, note the need to escape the
# \ in \d
hash.keys.any? { |k| k.match("^#{prefix}\\d$") }

@DigitalRoss:where:a,:b ect将是video,video1等?对,在某个点上(1.9?)数组得到了一个
abbrev
方法,它真正实现了您想要的功能。我认为类似于hash.keys.abbrev'video'hash.keys.any?(&blk)的东西是解决这个问题的完美方法。您几乎可以检查块中的任何条件,字符串是否具有特定的结构({k|k.match(/^video\d$/}),特定类的对象是否是键({k|k.is|a?(数值)}),…@mikej:我喜欢你解释一切的方式……你能不能在你的回答中补充一下,如果我们使用变量名而不是实际的字符串“video”,代码会是什么样子?谢谢you@Radek更新了答案以显示前缀在变量中的位置。希望这是您想到的类型。我计算了va的语法我觉得这个答案对其他人来说可能是完美的…谢谢你做了这么好的工作!
prefix = 'video'
# use an interpolated string, note the need to escape the
# \ in \d
hash.keys.any? { |k| k.match("^#{prefix}\\d$") }