2016-10-24 100 views
0

#創建空數組(數組1)紅寶石輸入數組,沒有重複輸出數組

array1 = [] 
    i = 0 

#從用戶採取10個號碼,並將它們存儲在數組中

while array1.size < 10  
     print "Enter a number: " 
     array[i] = gets.chomp.to_i 
     i += 1 
    end 

#推只有獨特的元素成陣列(陣列2)

k = 0 
j = 0 
array2 = [] 

while k < array1.size 
    if array1[k] != array1[j] 
     if array2.include? (array1[k]) 
      puts "Element already exists" 
     else 
      array2.push(array1[k]) 
     end 
     j += 1 
    end 
    k += 1 
end 

puts array2 

它只適用於某些情況,但在任何時候,fi第一個唯一的元素由於某種原因未被添加到新數組中,我應該從1開始j或k,而不是0?

我知道,我可以使用.uniq並打開陣列分爲一組,然後返回到一個數組,或者只是交叉陣列&,但我想讓它沒有紅寶石「捷徑」,有什麼建議?

+1

@AndreyDeineko該死的,我只是編輯了,因爲我知道的老總會說這樣的事情,yoiu很快 –

+1

順便說一句,陣列#uniq的返回數組,不是一套。 所以'array2 = array1.uniq'會做得很好 –

回答

0

當然。 k和j在啓動時都等於0。 所以array1 [k] == array1 [j]是真的,你得到k + = 1。 k現在是1,並且您錯過了array1的第一個元素。

沒有什麼特地Rubyish對這一解決辦法:

array2 = [] 
array1 = [1, 2, 3, 3, 2, 4, 5, 6] 

i=0 
while i<array1.size do 
    element = array1[i] 
    if !array2.include?(element) then 
    array2.push(element) 
    end 
    i += 1 
end 

puts array2.inspect