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"
。但是,如何从第一个条目中避免这个冒号:
?订单无关紧要。
答案 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"