2012-01-16 85 views
0

私は、この配列があります。Rubyの[]括弧を配列から削除するには?

[[16], [14], [13], [17], [18], [15, 16], [15, 14], [15, 13], [15, 17], [15, 18], [16, 14], [16, 13], [16, 17], [16, 18], [14, 13], [14, 17], [14, 18], [13, 17], [13, 18], [17, 18], [15, 16, 14], [15, 16, 13], [15, 16, 17], [15, 16, 18], [15, 14, 13], [15, 14, 17], [15, 14, 18], [15, 13, 17], [15, 13, 18], [15, 17, 18], [16, 14, 13], [16, 14, 17], [16, 14, 18], [16, 13, 17], [16, 13, 18], [16, 17, 18], [14, 13, 17], [14, 13, 18], [14, 17, 18]] 

どのように私は、いくつかの配列の括弧を削除するには、[]ので、配列は次のようになること:

[16, 14, 13, 17, 18, [15, 16], ..., [14, 13, 18], [14, 17, 18]] 
+0

したがって、長さが1の配列から角かっこを削除するだけですか? – kinakuta

+0

ちょうどclearifyする:OPは単一の項目のまわりの括弧を取り除きたい。 – kba

+0

@kinakuta:はい、これは実現したいことです –

答えて

1

これは非常にエレガントではありませんが、あなたが望むものを得ます: )

b = [[16], [14], [13], [17], [18], [15, 16], [15, 14], [15, 13], [15, 17], [15, 18], [16, 14], [16, 13], [16, 17], [16, 18], [14, 13], [14, 17], [14, 18], [13, 17], [13, 18], [17, 18], [15, 16, 14], [15, 16, 13], [15, 16, 17], [15, 16, 18], [15, 14, 13], [15, 14, 17], [15, 14, 18], [15, 13, 17], [15, 13, 18], [15, 17, 18], [16, 14, 13], [16, 14, 17], [16, 14, 18], [16, 13, 17], [16, 13, 18], [16, 17, 18], [14, 13, 17], [14, 13, 18], [14, 17, 18]] 

b.collect { |c| c.count() == 1 ? c[0] : c } 
0

この質問は一種の不明であるが。はい、配列の配列を持っているようですね?もしそうなら、あなたはこの

count = 0 
array.each { |x| 
    if x.is_a?(Array) 
    if x.length == 1 
     array[count] = x[0] 
    end 
    end 
    count = count + 1 
} 

ような何かを行うことができますあなたが望むことがちょうど整数のための単一の要素の配列を交換する場合、これが少しきれいに作ることができるが、それはあなたが欲しいものを行う必要があります。しかし、Rubyでこれを行うことができるかどうかは完全にはわかりませんが、配列には整数と配列の配列がありますが、(Javaでこれを行うことはできません)できると思います。

+0

配列は任意のもので構成できます。 –

+0

(私は不要な作業を避けるために 'each_with_index'も使います:) –

3
new_arr = arr.collect { |a| a.size == 1 ? a[0] : a } 

または、インプレース:非信者のための

arr.collect! { |a| a.size == 1 ? a[0] : a } 

出力:

[1] pry(main)> arr = [[16], [14], [15, 16], [15, 14], [15, 16, 17], [15, 16, 18]] 
=> [[16], [14], [15, 16], [15, 14], [15, 16, 17], [15, 16, 18]] 
[3] pry(main)> new_arr = arr.collect { |a| a.size == 1 ? a[0] : a } 
=> [16, 14, [15, 16], [15, 14], [15, 16, 17], [15, 16, 18]] 
# Note that arr is unchanged at this point. 
[5] pry(main)> arr.collect! { |a| a.size == 1 ? a[0] : a } 
=> [16, 14, [15, 16], [15, 14], [15, 16, 17], [15, 16, 18]] 
[6] pry(main)> arr 
=> [16, 14, [15, 16], [15, 14], [15, 16, 17], [15, 16, 18]] 
+0

@Railsbeginner本当はそうではありません。両方のコード断片は、彼らが言うことを正確に行います。最初の配列は新しい配列を返し、2つ目の配列は 'collect!'配列を修正します。 –

関連する問題