2012-01-24 4 views
0

の間、私は部品または各文字列の項目を取得し、別々の配列によう ものを作成したい文字列ルビー:文字列「同じ文字列の部分」から取得する - このよう

["2 192.168.1.101 10000",56 192.168.1.101 10001","3 192.168.1.101 10002","1 192.168.1.101 10003"] 

の配列を持っています:

["2","56","3","1"] , ["192.168.1.101","192.168.1.101","192.168.1.101","192.168.1.101"] and 
["10000","10001","10002","10003"] 

私の質問はそれらの文字を取得する方法ですか?最初のアレイ用の

、それは「への最初からのようなものになるだろう「と」< を取得してからのようなサード何かのために」「空きが< そして二番目の配列のためを取得し、それはからのようなものになるだろう」 ""最後に取得する<

私の質問がよく理解され、私はいくつかの返信を得ることを願って 事前におかげで!

答えて

3
data = ["2 192.168.1.101 10000","56 192.168.1.101 10001","3 192.168.1.101 10002","1 192.168.1.101 10003"] 
data.collect {|value| value.split(" ")}.transpose 
+1

良い答えですが、最初に変数を配列に割り当てることで、スクロールせずに答えが表示されるようにすることはできますか? –

+0

@AlexとMark:そうです、ごめんなさい! – Jef

0

高速かつ冗長バージョン:

data = ["2 192.168.1.101 10000","56 192.168.1.101 10001","3 192.168.1.101 10002","1 192.168.1.101 10003"] 
result = [[],[],[]] 
data.each do |element| 
    parts = element.split 
    result[0] << parts[0] 
    result[1] << parts[1] 
    result[2] << parts[2] 
end 

puts result.inspect 
5

ジェフの答えよりも少し短い:デフォルトでは空白に

data = ["2 192.168.1.101 10000","56 192.168.1.101 10001","3 192.168.1.101 10002","1 192.168.1.101 10003"] 
data.map(&:split).transpose 

String#split分割し、あなただけのメソッドを呼び出す必要があります各アレイエントリに対して、map { |x| x.do_something }の代わりに、より短いmap(&:do_something)を使用できます。

+0

igored 'String#split'は空白をセパレータとして使います。いいです!あなたのバージョンよりも短いバージョンはかなり難しいでしょう... – Jef