我有多个数组,其中包含代码字符串项。我需要匹配给定字符串中的代码,然后从匹配的数组中返回一个类名。
如果我告诉你我有什么,可能会更好。下面是数组,下面是我需要返回的字符串,如果给定的字符串匹配数组中的项目。所以我要发送一个'329'的字符串,这应该返回'ss4'作为字符串:
['392', '227', '179', '176']
= 'ss1'
['389', '386']
= 'ss2'
['371', '338', '335']
= 'ss3'
['368', '350', '332', '329', '323', '185', '182']
= 'ss4'
我需要知道什么是最好的方法。我可以创建一个辅助方法并为每个代码块创建一个数组,然后检查每个数组以查看是否包含给定的字符串代码,然后返回字符串,可以是ss1或ss4。这是个好主意吗?
答案 0 :(得分:5)
最有效的方法是生成一个可以超快速执行查找的转换器哈希:
CODES = {
ss1: ['392', '227', '179', '176'],
ss2: ['389', '386'],
ss3: ['371', '338', '335'],
ss4: ['368', '350', '332', '329', '323', '185', '182']
}
translator = CODES.each_with_object({}){|(s, a), m| a.each{|n| m[n] = s.to_s}}
现在你可以做到:
translator['329']
=> "ss4"
translator['389']
=> "ss2"
答案 1 :(得分:1)
def code_to_string(code)
if [395].include? code
"ss1"
elsif [392, 227, 179, 176].include? code
"ss2"
# and so on
end
请注意,代码是整数。要匹配字符串代码,请使用%w(392 227 179).include?
而不是数组
答案 2 :(得分:0)
我建议将所有数组加入到一个多维哈希中,然后搜索它。
a1 = ['395']
a2 = ['392', '227', '179', '176']
h = { a1: a1, a2: a2 }
h.select {|a, v| a if v.include?('392') }.keys.first.to_s
答案 3 :(得分:0)
以下是您可以尝试的一种解决方案:
CODE_LOOKUP = {
[395] => 'ss1',
[392, 227, 179, 176] => 'ss2',
[389, 386] => 'ss3'
# etc
}
def lookup_code(code)
CODE_LOOKUP.each do |codes_to_test, result|
return result if codes_to_test.include?(code)
end
end
lookup_code(395)
# => "ss1"
lookup_code(179)
# => "ss2"
答案 4 :(得分:0)
h = {:ss1 => [395],:ss2 => [392, 227, 179, 176] }
h.key(h.values.find{|x| x.include? "392".to_i})
#=> :ss2