我从redis(通过我的项目的控制器)返回一个数组,我需要在我的产品视图中对其进行解构。
数组(显示 2 个结果,但可以更多):
["project-5", "project-4"]
数字 (5, 4) 是我的项目 ID (@project.id),我需要减去它才能在.each do
函数中使用。
我能找到的只是多个变量的解构解决方案。但在这里我只有 1 个变量。
谁能帮我解决如何将产品ID从这个数组中分离出来?
我从redis(通过我的项目的控制器)返回一个数组,我需要在我的产品视图中对其进行解构。
数组(显示 2 个结果,但可以更多):
["project-5", "project-4"]
数字 (5, 4) 是我的项目 ID (@project.id),我需要减去它才能在.each do
函数中使用。
我能找到的只是多个变量的解构解决方案。但在这里我只有 1 个变量。
谁能帮我解决如何将产品ID从这个数组中分离出来?
您可以使用match方法在正则表达式的帮助下获取 id。假设array
由您的带有 id-s 的项目组成3
,44
然后单线将是:
2.0.0-p353 :091 > array.map{|el| el.match(/\d+$/)[0]}
=> ["3", "44"]
如果你确定需要使用.each do
那么
array.each do |el|
el.match(/\d+$/)[0]
end
您还可以使用带有正则表达式的方法gsub将除id
内部字符串之外的所有内容替换为空字符串,因此仅保留字符串的 id 部分。单线(array = ["proj3ct-3", "project-1567"]
):
2.0.0-p353 :040 > array.map {|el| el.gsub(/(.*\-)[^\d]*/, "")}
=> ["3", "1567"]
.each do
与前面的示例类似match
。
编辑:如果您希望do
-block 以已格式化的形式返回数组,那么您应该使用gsub中的 bang-methodel.gsub!(/(.*\-)[^\d]*/, "")
,如下所示:这也会对元素进行更改。非爆炸方法仅返回更改的值而不更改它们。
以防万一您不知道并且想测试/分析您的正则表达式,那么这是一个很好的地方 - 我已经使用它很长一段时间了。这里也是重新检查一些基础知识的好地方