繁体   English   中英

从字符串获取并存储数字

[英]Get & store digits from string

我有一串这样的值:

=> "[\"3\", \"4\", \"60\", \"71\", \"49\", \"62\", \"9\", \"14\", \"17\", \"63\"]"

我想将每个值放在数组中,以便可以使用每个do。 所以像这样:

@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\"]"

看起来像一个JSON字符串数组。 您可能可以使用Ruby的内置JSON库进行解析,然后将数组的元素映射为整数:

input = "[\"3\", \"4\", \"60\", \"71\", \"49\", \"62\", \"9\", \"14\", \"17\", \"63\"]"

require 'json'
ids = JSON.parse(input).map(&:to_i)

@answers += Answer.find(ids)

我会用:

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代码一样。 如果输入来自尚未擦洗的用户输入,则您不想这样做。

在您的代码中n是一个字符串,而不是整数。 #find方法需要一个整数,因此您需要在迭代之前将字符串转换为整数数组。 例如:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM