我可以做hash.has#u key吗?(';video';或';video2';)(ruby)
或者更好的是我可以做hash.has_key?('videox')其中x是我可以做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.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$") }