ruby将值添加到以逗号分隔的字符串,但第一个元素除外

时间:2014-10-06 12:54:12

标签: ruby-on-rails ruby string

    device_target = ["3001", "3002", "3003"]
    devices = ",kv1101="
    device_target.map {|d|
      case d
        when "30000" #desktop
          devices << ":9"
        when "30001" # smartphone
          devices << ":3:4:6:8"        
        when "30002" #tablet
          devices << ":2:5:7"
        when "30003" #feature_phone
          devices << ":1"
      end

我的目标是获得devices = "kv1101=3:4:6:8:2:5:7:1"。但是,如何从第一个条目中避免这个冒号:?订单无关紧要。

3 个答案:

答案 0 :(得分:7)

将值存储在数组中,然后使用join方法:

devices = ",kv1101="
my_devices = []
device_target.map {|d|
  case d
    when "30000" #desktop
      my_devices << "9"
    when "30001" # smartphone
      my_devices += ["3","4","6","8"]
    when "30002" #tablet
      my_devices += ["2","5","7"]
    when "30003" #feature_phone
      my_devices << "1"
  end}
devices << my_devices.join(":")

答案 1 :(得分:6)

Fer's answer类似,但使用flat_map及其返回值:

device_target = ['30001', '30002', '30003']
devices = ',kv1101='
devices << device_target.flat_map { |device|
             case device
             when '30000' then 9            # desktop
             when '30001' then [3, 4, 6, 8] # smartphone
             when '30002' then [2, 5, 7]    # tablet
             when '30003' then 1            # feature_phone
             end
           }.join(':')

devices #=> ",kv1101=3:4:6:8:2:5:7:1"

或使用查找表suggested by tadman

device_target = ['30001', '30002', '30003']
device_map = {
  '30000' => 9,            # desktop
  '30001' => [3, 4, 6, 8], # smartphone
  '30002' => [2, 5, 7],    # tablet
  '30003' => 1             # feature_phone
}

devices = ',kv1101='
devices << device_target.flat_map { |d| device_map[d] }.join(':')

答案 2 :(得分:-1)

试试这个:

"kv1101=:3:4:6:8:2:5:7:1".sub(/:/, "")
=> "kv1101=3:4:6:8:2:5:7:1"