我想根据用户输入在数组中添加/删除数字。这就是我的尝试:
a = %w[1 2 3 4 5 6 7 8 9]
delete_list = []
puts a
puts "pick 1-9 to del"
input = gets.to_i
input << a
puts a
最后一行是检查它是否有效,我得到"no implicit conversion of Array into Integer"
。这是因为我使用%w
并且数组不是基于整数的吗?
a = %w[1 2 3 4 5 6 7 8 9]
a.map! {|e| e.to_i}
puts a
puts "pick 1-9 to del"
input = gets.chomp
a.delete(input)
puts a
好吧,我这样改了。但我似乎没有成功使用a.delete(输入)命令,因为我的阵列仍打印出1-9。我究竟做错了什么?
答案 0 :(得分:0)
要删除特定位置的元素,请使用Array#delete_at
:
input = gets.to_i
a.delete_at(input - 1) # index starts from `0`
如果您想要按位置而不是按值删除项目,请使用Array#delete
。
input = gets.chomp # `a` contains strings; used `.chomp` instead of `.to_i`
a.delete(input)
答案 1 :(得分:0)
是。这是因为Fixnum#<<
的参数必须是整数,而不是数组。
答案 2 :(得分:0)
关注代码的关键行:
a = %w[1 2 3 4 5 6 7 8 9]
这使变量&#34; a&#34;一个字符串元素数组:
=> ["1", "2", "3", "4", "5", "6", "7", "8", "9"]
然后设置此变量:
input = gets.to_i
这会从用户获取一个字符串(&#34;获取&#34; - 就像名称getStringFromUser的缩写),然后.to_i
将其转换为整数。
这可能会导致&#34; 0&#34; (如果输入了字母)或输入的任何整数:
=>0
或=> #some integer
然后你试图将一个数组放入整数:
input << a
Ruby试图采用&#34; a&#34;元素数组(类Array)并将其塞入该整数(aka:class Fixnum)变量&#34;输入&#34;。这是你得到错误的地方 - Ruby不能使用类似&#34;&lt;&lt;&#;&#34;这样的方法将数组放入整数。
如果您更换了该行:
input << a
使用:
a << input
你至少会得到一个功能性的结果。
如果&#34;得到&#34;是的,输入= 9,然后你的最后puts a
会给你:
=> ["1", "2", "3", "4", "5", "6", "7", "8", "9", 9]
这是一个Array元素,由一串字符串元素和一个推到最后的整数元素组成。
现在,从puts "pick 1-9 to del"
开始,您似乎想从数组中删除一个元素。
首先,您希望您的数组是整数而不是字符串...类似于:
a.map! {|e|e.to_i}
=&GT; [1,2,3,4,5,6,7,8,9]
(如果你没有将输入转换为整数,你可以跳过最后一步......或者奇怪地将&#34;输入&#34;转换回带有input.to_s
的字符串)
现在&#34; a&#34;是一个整数数组,你可以使用&#34; delete&#34;删除一个整数。数组的方法并告诉它删除&#34;输入&#34;的值。变量:
a.delete(input)
=> 9
#it返回您删除的值。
您的上次puts a
会返回:
=> [1, 2, 3, 4, 5, 6, 7, 8]
这是一个很长的步骤,但希望这会有所帮助。