2014-04-18 131 views
-1

我是Ruby的新手,我似乎很喜歡使用while循環。但我想通過可能使用'each'方法來簡化我的代碼。我將如何爲此特定代碼塊執行此操作?需要使這更像紅寶石

sum_array = [] 
i = 0 
while i < array.length - 1 
    j = i + 1 
    while j < array.length 
     sum = array[i] + array[j] 
     if sum != 0 
      sum_array << sum 
     end 
     j += 1 
    end 
    i += 1 
end 
+2

一個簡短的說明或一個例子就可以了。即使你的代碼不那麼複雜也很難閱讀。當你添加更多信息時,我想你會得到更多答案。 – spickermann

回答

4
sum_array = array.combination(2).map{|n, m| n + m}.reject(&:zero?) 
+0

+1陣列#組合方式更好! – Gumbo

+0

這太好了!謝謝! – arjis02

2
array = (1..10).to_a # test array [1,2,3,4,....10] 
sum_array = [] 
(0...array.length).each do |i| # from 0 to array.length-1 
    (i+1...array.length).each do |j| # from i+1 to array.length-1 
    sum = array[i] + array[j] 
    sum_array << sum unless sum == 0 # brief condition 
    end 
end 
0
def sum_array(input) 
    [].tap do |sums| 
    input.each_with_index do |x, index| 
     tail = input[index.next..-1] 
     tail.each do |y| 
     sum = x + y 
     sums << sum unless sum.zero? 
     end 
    end 
    end 
end 

puts sum_array([1,2,0,0]) 
# => [3,1,1,2,2] 
0

你可以這樣做:

sum_array = [] 
array.each_index do |i| 
    sum_array += (i+1...array.length).collect { |j| array[i] + array[j] } 
end 
sum_array.reject!(&:zero?) 
+0

這總是返回一個空的'sum_array'。 '(i + 1 ..- 1).collect'對於遞減範圍沒有做任何事情(在它上調用'.to_a'也會產生空數組。 –

+0

@DaniëlKnippers首先有'array [i + 1 ..- 1]'的東西。 – Gumbo