从多个数组项返回字符串

时间:2013-04-25 14:06:43

标签: ruby-on-rails ruby

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

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

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

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

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

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

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

5 个答案:

答案 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