0

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

我有 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 等等。

4

3 回答 3

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"]

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

于 2013-02-21T20:26:59.153 回答
1

我将在这里做一些假设:

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

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
于 2013-02-21T20:17:30.050 回答
1
array = [
  [client1, category1], [client2, category2], [client3, category3],
  [client1, category4], [client4, category2],
]
.map{|a| a.join("_") unless a.any?(&:empty)}.compact
于 2013-02-21T20:19:06.330 回答