我有一串这样的值:
=> "[\"3\", \"4\", \"60\", \"71\", \"49\", \"62\", \"9\", \"14\", \"17\", \"63\"]"
我想将每个值放在一个数组中,以便我可以使用每个值。所以像这样:
@numbers =>["72", "58", "49", "62", "9", "13", "17", "63"]
这是我想在字符串是可用数组时使用的代码:
@numbers.each do |n|
@answers << Answer.find(n)
end
我尝试使用split()
,但字符的每一边都没有平衡字符。我也试图使用正则表达式split(/\D/)
,但我认为我的想法越来越差。
控制器:
@scores = []
@each_answer = []
@score.answer_ids.split('/').each do |a|
@each_answer << Answer.find(a).id
end
@score.answer_ids
的位置:
=> "[\"3\", \"4\", \"60\", \"71\", \"49\", \"62\", \"9\", \"14\", \"17\", \"63\"]"
答案 0 :(得分:3)
看起来像一个JSON字符串数组。您可以使用Ruby's built-in JSON library来解析它,然后将数组的元素映射到整数:
input = "[\"3\", \"4\", \"60\", \"71\", \"49\", \"62\", \"9\", \"14\", \"17\", \"63\"]"
require 'json'
ids = JSON.parse(input).map(&:to_i)
@answers += Answer.find(ids)
答案 1 :(得分:2)
我会用:
foo = "[\"3\", \"4\", \"60\", \"71\", \"49\", \"62\", \"9\", \"14\", \"17\", \"63\"]"
foo.scan(/\d+/) # => ["3", "4", "60", "71", "49", "62", "9", "14", "17", "63"]
如果你想要整数而不是字符串:
foo.scan(/\d+/).map(&:to_i) # => [3, 4, 60, 71, 49, 62, 9, 14, 17, 63]
如果数据来自您的系统内部,并且不是用户从互联网上输入的结果,那么您可以做一些简单的事情:
bar = eval(foo) # => ["3", "4", "60", "71", "49", "62", "9", "14", "17", "63"]
将执行字符串的内容,就好像它是Ruby代码一样。如果输入来自您尚未擦除的用户输入,则不希望这样做。
答案 2 :(得分:1)
在您的代码中 n 是一个字符串,而不是一个整数。 #find方法需要一个Integer,因此您需要在迭代之前将String转换为整数数组。例如:
str = "[\"3\", \"4\", \"60\", \"71\", \"49\", \"62\", \"9\", \"14\", \"17\", \"63\"]"
str.scan(/\d+/).map(&:to_i).each do |n|
@answers << Answer.find(n)
end