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

3
    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
请提供有效的输入和输出。该代码无法生成“9:3:4:6:8:2”。 - Stefan
3
我确定这只是一个打字错误,但是你的“targets”应该是3001, 3002, 3003,因此有两件事情:首先没有3000,其次,你的case语句永远不会起作用,因为d永远不会在30000、30001、30002、30003中。 - engineersmnky
如果有任何答案对您有帮助,请考虑选择您最看重的答案。 - Cary Swoveland
3个回答

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(":")

6
类似于Fer的回答,但使用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"

或者使用查找表,如由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(':')

1
flat_map在这种情况下表现得非常好。如果不使用严格的case语句,而是使用哈希表作为查找表,它甚至可以更好。 - tadman
#2的一个变体:",kv1101="+device_map.values_at(*device_target).flatten.join(?:) - Cary Swoveland

-1

试一下这个:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接