2012-01-16 55 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 2012-01-16 01:08:07

+0

只是爲了清除:OP想要刪除單個項目周圍的括號。 – kba 2012-01-16 01:08:25

+0

@kinakuta:是的,這就是我想要實現的 – 2012-01-16 01:09:20

回答

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

您可以擁有一個包含任何您想要的數組的數組。 – 2012-01-16 01:14:38

+0

(我也使用'each_with_index'來避免不必要的工作:) – 2012-01-16 01:32:12

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不是真的;這兩個代碼片段完全按照他們所說的做。第一個返回一個新數組,第二個修改數組'collect!'被調用。 – 2012-01-16 01:18:56