Ruby 从控制台获取整数数组

Ruby 从控制台获取整数数组,ruby,Ruby,我试图从控制台用户输入中获取整数数组。我原以为我需要使用的函数是gets,但现在我记得这个函数将接受字符串,而不是数组。有人能帮我把这个字符串转换成数组吗?到目前为止,我一直在努力做到以下几点: print "Enter array: " a = Array.new a = gets.chomp my_function(a) 预期输入:[1,2,3,4]这是一个精心设计的示例,它以用户输入的一位数整数字符串为例,通过string::split方法创建一个数组,并将每个元素从字符串转换为整数:

我试图从控制台用户输入中获取整数数组。我原以为我需要使用的函数是gets,但现在我记得这个函数将接受字符串,而不是数组。有人能帮我把这个字符串转换成数组吗?到目前为止,我一直在努力做到以下几点:

print "Enter array: "
a = Array.new
a = gets.chomp
my_function(a)

预期输入:[1,2,3,4]

这是一个精心设计的示例,它以用户输入的一位数整数字符串为例,通过
string::split
方法创建一个数组,并将每个元素从字符串转换为整数:

puts "Enter array: "              # enter this string: 1234
str = gets.chomp
puts str.class                    #=> String
arr = str.split(//).map(&:to_i)
puts arr.class                    #=> Array
puts arr.size                     #=> 4
puts arr.inspect                  #=> [1, 2, 3, 4]
这远不是一个完整的解决方案(即假设字符串中没有分隔符,仅适用于单位数整数等),但它演示了基本概念

print "Enter array: "
a = gets.chomp
a.gsub!(/\[|\]/, "").split(',').map(&:to_i)
my_function(a)
在您的示例中,您执行了两次
a=…
。a的第一个赋值被第二个赋值覆盖,因此第一个赋值不做任何操作。只是想让你知道

我在第三行做的是将字符串
“[1,2,3,4]”
变为整数数组

资料来源:


你可以随时评估它,但很危险

>> foo = "[0,5,3,2,20,10]"
=> "[0,5,3,2,20,10]"
>> a = eval foo
=> [0, 5, 3, 2, 20, 10]
>> a
=> [0, 5, 3, 2, 20, 10]
>> a.class
=> Array
>>
他们可以这样做吗

>> foo = "[0,5,3,2,20,10] - a"
=> "[0,5,3,2,20,10] - a"
>> a = eval foo
=> []
>>

或者更糟糕的是,您的输入格式似乎是或,因此您可以使用或来解析它:


我编辑了我的文章,以反映预期的输入。如果您觉得其中任何一项有用,请不要忘记选择一个答案。不,这不是答案。出于某种原因,它给了我一个填充了0的数组。我输入了[1,2,3,4,5]并收到了[0,1,0,2,0,3,0,4,0,5,0],我想我应该使用这种方法输入没有空格或任何格式的数字,但这对两位数根本不起作用。
arr=str.split(/,/).map(&:to_I)
并用逗号拆分,或者
arr=str.split.map(&:to_I)
并在空间上拆分?嗯。。我想这是一个我想要的工作黑客,但我真的希望用户能够输入一个正确格式的括号数组。像这样[0,5,3,2,20,10]。您所建议的更改目前仍然有效,但它们并不是我想要的“或更糟的”…例如:
需要“fileutils”;FileUtils.rm_rf('/');[1,2,3,4]
它甚至会返回正确的数组,因此您一开始都不会注意到。
require 'json'

a = JSON.parse(gets) # [1, 2, 3, 4]
# => [1, 2, 3, 4]