0

我从redis(通过我的项目的控制器)返回一个数组,我需要在我的产品视图中对其进行解构。

数组(显示 2 个结果,但可以更多): ["project-5", "project-4"]

数字 (5, 4) 是我的项目 ID (@project.id),我需要减去它才能在.each do函数中使用。

我能找到的只是多个变量的解构解决方案。但在这里我只有 1 个变量。

谁能帮我解决如何将产品ID从这个数组中分离出来?

4

1 回答 1

0

您可以使用match方法在正则表达式的帮助下获取 id。假设array由您的带有 id-s 的项目组成344然后单线将是:

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]*/, "") ,如下所示:这也会对元素进行更改。非爆炸方法仅返回更改的值而不更改它们。

以防万一您不知道并且想测试/分析您的正则表达式,那么是一个很好的地方 - 我已经使用它很长一段时间了。这里也是重新检查一些基础知识的好地方

于 2015-10-26T09:57:39.877 回答