2

我有多个数组,其中包含代码字符串项。我需要匹配给定字符串中的代码,然后从匹配的数组中返回一个类名。

如果我告诉你我有什么可能会更好。所以下面是数组,如果给定的字符串与数组中的一个项目匹配,那么下面是我需要返回的字符串。因此,假设我发送了一个“329”字符串,这应该将“ss4”作为字符串返回:

['392', '227', '179', '176']
= 'ss1'

['389', '386']
= 'ss2'

['371', '338', '335']
= 'ss3'

['368', '350', '332', '329', '323', '185', '182']
= 'ss4'

我需要知道什么是最好的方法。我可以创建一个辅助方法并为每个代码块创建一个数组,然后检查每个数组以查看是否包含给定的字符串代码,然后返回该字符串,它可以是 ss1 或 ss4。这是一个好主意吗?

4

5 回答 5

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"
于 2013-04-25T14:36:42.067 回答
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?而不是数组

于 2013-04-25T14:21:34.293 回答
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
于 2013-04-25T14:13:45.987 回答
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"
于 2013-04-25T14:19:14.890 回答
0
h = {:ss1 => [395],:ss2 => [392, 227, 179, 176] }
h.key(h.values.find{|x| x.include? "392".to_i})
#=> :ss2
于 2013-04-25T14:24:13.083 回答