开发者

Ruby - Arrays - What would be a smart way to do this:

if country == "Switzerland"
      icon_link = "ch"
    elsif country == "Poland"
      icon_link = "pl" 
    elsif country == "Germany"
      icon_link = "de"
    elsif country == "Spain"
      icon_link = "sp"
    elsif country == "Japan"
      icon_link = "jp"
    elsif country == "Kazakh开发者_如何学Cstan"
      icon_link = "kz"  
    elsif country == "Hong Kong"
     icon_link = "hk" 
    elsif country == "China"
      icon_link = "cn"
    end
    image_tag("icons/flags/#{icon_link}.png",options)

I'm guessing I would need to create an array and use the keys but don't figure out how to do it.

Thanks for your help.


You likely want a Hash:

# do this part once to load your hash
countryCode = {
  "Switzerland" => "ch",
  "Germany"     => "de",
  # ...
}

# generate the image_tag call
if( countryCode.has_key?( country ) )
  image_tag( "icons/flags/#{countryCode[country]}.png",options)
else
  # country code not in your hash
end


 icon_links = { "Switzerland" => "ch",
                "Poland"=> "pl",
                "Germany" => "de",
                "Spain" => "sp",
                "Japan" => "jp",
                "Kazakhstan" => "kz",  
                "Hong Kong" => "hk", 
                "China" => "cn"}
 icon_link = icon_links[country]
 image_tag("icons/flags/#{icon_link}.png",options)


In Ruby, a Hash can do this. In other languages, similar functionality is sometimes called an "associative array". Basically they take a key (in your case the country) and a value (the locale code, such as 'cn').

Declare the hash:

country_codes = {"Switzerland" => "ch",      "Poland" => "pl", etc.... }
                    / key \     / value \     / key \   /value\

With the hash declared above:

country_codes["Switzerland"] => "ch"

Then you use it like:

image_tag("icons/flags/#{country_codes[country]}.png",options)

See: http://www.troubleshooters.com/codecorn/ruby/basictutorial.htm#_Hashes


For your special need, I would recommend the Hash-solution in the other answers.

As an alternative you may use case instead the if-elsif-construct.

case country 
  when "Switzerland"
    icon_link = "ch"
  when "Poland"
    icon_link = "pl" 
  when "Germany"
    icon_link = "de"
  when "Spain"
    icon_link = "sp"
  when "Japan"
    icon_link = "jp"
  when "Kazakhstan"
    icon_link = "kz"  
  when "Hong Kong"
   icon_link = "hk" 
  when "China"
    icon_link = "cn"
end

You can integrate case also as paramter:

image_tag("icons/flags/%s.png" % case country 
  when "Switzerland"
    "ch"
  when "Poland"
    "pl" 
  when "Germany"
    "de"
  when "Spain"
    "sp"
  when "Japan"
    "jp"
  when "Kazakhstan"
    "kz"  
  when "Hong Kong"
   "hk" 
  when "China"
    "cn"
  else
    "dummy"
end, options)
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜