如何根据Ruby中的用户输入从数组中删除元素?

时间:2016-09-12 20:49:27

标签: arrays ruby

我不确定我在哪里出错了。我有一个数组,系统会提示用户有关应从阵列中删除的数字的问题。存储该数字,结果是一个新的数组,用删除的值输出。

def delete(number)
  a = [1, 2, 1, 3, 1, 4, 2, 5]
  puts "Please type number to be deleted?"
  number = gets
  result= a.delete(number)
  puts result
end
a.delete(number)

2 个答案:

答案 0 :(得分:0)

也许做这样的事情?

  def delete(num,array)
    array.reject { |el| el == num }
    puts array
  end
  a = [1, 2, 1, 3, 1, 4, 2, 5]
  puts "Please type number to be deleted? from array #{a}"
  number = gets
  delete(number.to_i,a)

答案 1 :(得分:0)

为什么你的代码不起作用

通常,Kernel#gets返回带有尾部换行符的String。因此,Array#delete没有匹配的元素。

工作方案

您需要将输入转换为#gets方法的Integer。从方法返回值也很有用。以下工作,也用于验证用户的输入:

require 'pp'

def delete_from_array array
  print 'Number to be deleted: '
  array.delete Integer(gets)
  pp array
end

array = [1, 2, 1, 3, 1, 4, 2, 5]
delete_from_array array.dup

请注意,#delete会修改原始数组,而不是返回副本。在大多数情况下,您可能希望使用#dup来确保不修改原始阵列。另一方面,如果您想要副作用,那么在将数组作为参数传递时,只需忽略对#dup的调用。