ruby - Ruby 哈希仅返回 TRUE
问题描述
如果字符串中的任何值匹配,我想输出该值
代码:
list = {
"red" => ["apple", "cherry"],
"blue" => ["sky", "cloud"],
"white" => ["paper"]
}
str = "testString"
list.each do |k, v|
puts "string: #{str}"
puts "value: #{v}"
puts /^*#{v}*/.match? str.to_s
end
我希望输出为假,因为没有匹配项
但实际输出都是真的..
string: testString
value: String
true
string: testString
value: String
true
string: testString
value: String
true
如果“testString”匹配任何“值”
如何打印价值的关键?
下面的代码是我的错误代码。
list.each do |k, v|
puts "string: #{str}"
puts "value: #{v}"
if /^*#{v.to_s}*/.match? str
puts "key of value is : #{k}"
end
end
解决方案
您的v
变量实际上是一个单词数组。
所以当你说:
if /^*#{v.to_s}*/.match? str
这实际上是在做这样的事情:
if /^*["apple", "cherry"]*/.match?(string)
这不是你需要的。
如果要查看是否有任何单词匹配,可以使用Array#any? :
list = {
"red" => ["apple", "cherry"],
"blue" => ["sky", "cloud"],
"white" => ["paper"]
}
str = "testString"
list.each do |key, words|
puts "string: #{str}"
puts "value: #{words}"
puts words.any? { |word| /^*#{word}*/.match? str.to_s }
end
打印:
string: testString
value: ["apple", "cherry"]
false
string: testString
value: ["sky", "cloud"]
false
string: testString
value: ["paper"]
false
请注意,我并不清楚预期的输出是什么,但如果你想打印除真/假以外的东西,你可以这样做:
if words.any? { |word| /^*#{word}*/.match? str.to_s }
puts "its a match"
else
puts "its not a match"
end
推荐阅读
- python - 使用 googleapiclient 从 Python 中调用 Google Cloud 函数
- ruby-on-rails - 如何根据关联记录对记录进行排序
- c# - C# MEF DirectoryCatalog 的意外结果与相同的 DLL 文件名
- ssl - 拥有 2.1.3 版 (Android) 和 MQTT 3.1 版 (Ubuntu 20.04)
- powershell - 如何遍历表中的列值并通过powershell创建文件夹
- python - 通过 M2O 关系与模型链接的模型通过 M2O 关系与模型进一步链接会引发错误
- c# - 如何通过单击特定单元格来切换 Excel 工作表?VSTO C#
- ios - Firebase Firestore iOS 多种型号
- javascript - 正则表达式捕获内联数学公式,例如:python 或 javascript 中的 $ inline $
- rule-engine - CodeEffects 规则编辑器在保存规则时抛出异常“没有找到“token”属性的“[NULL]”值的方法”