如何通过使用Ruby在其上推送项目来循环输入数组并构建输出数组

时间:2015-04-16 17:14:38

标签: ruby arrays loops include duplicates

我参加课程,其中一个问题需要我们构建一个ruby脚本。在脚本中定义一个方法调用unique,它将接受一个数组的参数。然后让该方法从数组中删除重复的项目。 (示例:unique([1,2,3,2,1,6,9])将返回[1,2,3,6,9])。我们必须实现一个使用array.uniq方法的版本,并实现一个不具备该版本的方法。这个版本将遍历输入数组,并通过推送输出数组来构建输出数组,具体取决于它是否为数组中的included?

这是我到目前为止所写的内容。有3种方法。第一个使用array.uniq并按预期运行。第二种是尝试使用.include?,但它显然会返回数组中的所有数字。不知道我在那里做了什么......第三个是在黑暗中拍摄,以查看数字是否重复,如果是,则不将其添加到test_array

任何人都可以帮助这个新人弄清楚我做错了什么以及我应该做什么?提前谢谢大家!

numbers = [1,2,3,2,1,6,9]

def unique(array)
  u_num = array.uniq
  puts "These are the numbers in the array #{array} without duplicates: #{u_num}"
end

puts unique(numbers)

#---------------------------------------------------------------------------------

new_array = []

numbers.each do |number|
  if numbers.include?(number)
    new_array << number
  end
end

puts "#{new_array}"

#---------------------------------------------------------------------------------  

test_array = []

numbers.each do |number|
  if number.detect { |i| numbers }
    test_array << i
  end
end

puts "#{test_array}"

1 个答案:

答案 0 :(得分:1)

仔细检查你的逻辑。要构建一个唯一元素数组,您需要将每个元素添加到新数组,除非新数组已包含元素。 Ruby让你几乎逐字地写这个逻辑:

new_array << number unless new_array.include? number