【问题标题】:Ruby Input Array, Output Array without duplicatesRuby 输入数组,输出数组没有重复
【发布时间】:2016-10-24 18:21:11
【问题描述】:

#创建空数组(array1)

 array1 = [] 
    i = 0

# 从用户那里获取 10 个数字并将它们存储在数组中

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

# 仅将唯一元素推送到新数组(array2)中

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

它只在某些情况下有效,但在任何时候,唯一的第一个元素都不会由于某种原因被添加到新数组中,我应该从 1 开始,而不是 0 开始 j 或 k?

我知道我可以使用 .uniq 并将数组转换为一个集合,然后返回一个数组,或者只是将数组与 & 相交,但我想在没有 ruby​​ 的“快捷方式”的情况下实现它,有什么建议吗?

【问题讨论】:

  • @AndreyDeineko该死的,我刚刚编辑了,因为我知道退伍军人会这么说,你快
  • 顺便说一下,Array#uniq 返回的是一个数组,而不是一个集合。所以array2 = array1.uniq 就可以了

标签: arrays ruby duplicates


【解决方案1】:

当然。 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 2021-10-01
    相关资源
    最近更新 更多