2016-10-24 93 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