2010-12-21 91 views
0

如何在Ruby中設置數組的固定數量的元素。如何在Ruby中設置固定數量的數組元素

例如。 a=["a","b","c","d"] 設置數組大小設置爲3將輸出

a=["a","b","cd"] 
+1

你能澄清你的問題嗎?你是說在你的例子中,第3和第4個元素是連接的嗎? – Dogweather 2010-12-21 02:08:56

+0

是的,它們是連接的,因爲我減少了數組中元素的數量。 – Dejan 2010-12-21 22:46:53

回答

3
class Array 
    def squeeze(n, &p) 
    p = Proc.new {|xs| xs.join} unless p 
    arr = self[0..n-2] 
    arr << p.call(self[n-1..-1]) 
    end 
end 

a = ['a', 'b', 'c', 'd', 'e'] 
a.squeeze(3) # => ["a", "b", "cde"] 

它需要邊界檢查,但你的想法。請注意,「合併」功能可以作爲一個塊參數:

[1, 2, 3, 4].squeeze(3) {|xs| xs.inject {|acc,x| acc+x}} # => [1, 2, 7] 
+0

這很好,在Ruby Array類中沒有本地實現這樣做,我以前看到過這樣的東西,但無法再找到它。 – Dejan 2010-12-21 23:58:54

6

如果你知道的元素只是一個個字符的字符串,你可以這樣做:

a.join.split '', 3 

否則:

a[0..1] + [a[2..-1].join] 

或許:

a[0..1] << a[2..-1].join 
+0

對於#1 +1。好看又簡潔,沒有視覺噪音。 – 2010-12-21 02:52:55