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 などに関連付けられます。ここで、有効なエントリのみを含む配列を取得する必要があります。そのうちの 1 つが空の場合は、次のエントリにスキップします。

そのため、両方が存在する場合にのみ、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)メソッドは、入力として2つの配列(クリエンテスの配列とカテゴリの配列)を取ります。

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 に答える