Ruby:带条件的字符串数组

时间:2013-02-21 20:01:36

标签: ruby

我需要生成一个检查某些条件的数组。这是场景。

我有3个变量包含这样的字符串:

client1 = "Google"
client2 = "Apple"
client3 = "Microsoft"

category1 = "sales"
category2 = "software"
category3 = "hardware"

我需要生成的输出是一个数组,它应该将所有客户端和类别用下划线“_”附加在一起。

期望的输出: array = ["Google_sales", "Apple_software", "Microsoft_hardware"]

到目前为止我尝试过:

array = [client1+"_"+category1, client2+"_"+category2, client3+"_"+category3]

现在,这很好用,我得到了我想要的东西。但是当变量为空时,复杂性就开始了。考虑另一个名为client4="" and category4=""的变量。现在这些都是空的,当我尝试完成我的数组时,我得到凌乱的数组值。

例如:array = [client1+"_"+category4, client4+"_"+category2]

这会给我一个这样的输出:array = ["Google_", "_software"]

问题:

用户填写客户端和客户端类别。用户可能无法输入客户端或类别。目前我有client1,client2,client3,client4和cat1,cat2,cat3,cat4。 Client1与cat1相关联,依此类推。现在我需要获得一个只有有效条目的数组,如果其中一个为空,那么我们跳到下一个。

所以我们只在两者都存在的情况下在client1和cat1之间插入“_”。否则我们将转移到client2和cat2,依此类推。

3 个答案:

答案 0 :(得分:2)

使用Array#zip和Array#join

最简单的方法是使用Array#zipArray#join。例如:

companies  = %w[Google Apple Microsoft]
categories = %w[sales software hardware]
companies.zip(categories).map { |array_pair| array_pair.join '_' }
# => ["Google_sales", "Apple_software", "Microsoft_hardware"]

如果你愿意,你可以让它变得更复杂,但只要你在每个数组中拥有相同数量的项目,这就简单到了。

答案 1 :(得分:1)

我将在这里做一些假设:

1)您的方法将两个数组作为输入:一组cliens和一组类别。

2)如果用户忽略输入值,则会在其位置保存空字符串。

3)如评论中所述,您所需的最终输出是一个逗号分隔的字符串。

def collect_clients_and_customers(clients, categories)
   returnable = ""
   if clients.size != categories.size
      puts "O MY GOD! SOMETHING HAS GONE TERRIBLY WRONG"
      nil
   else
      clients.each_with_index do |client, index|
          unless client[index].empty? or categories[index].empty?
               returnable = returnable+client[index]+"_"+categories[index]+","
          end
          if index == clients.size-1
               returnable = returnable[0..index-1]
          end
      end
   end
   returnable
 end

答案 2 :(得分:1)

array = [
  [client1, category1], [client2, category2], [client3, category3],
  [client1, category4], [client4, category2],
]
.map{|a| a.join("_") unless a.any?(&:empty)}.compact