我参加课程,其中一个问题需要我们构建一个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}"
答案 0 :(得分:1)
仔细检查你的逻辑。要构建一个唯一元素数组,您需要将每个元素添加到新数组,除非新数组已包含元素。 Ruby让你几乎逐字地写这个逻辑:
new_array << number unless new_array.include? number