我需要生成一个检查某些条件的数组。这是场景。
我有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,依此类推。
答案 0 :(得分:2)
最简单的方法是使用Array#zip和Array#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