我从redis(我的项目的控制器)获取一个数组,我需要在产品视图中进行解构。
数组(显示2个结果,但它可以更多):
["project-5", "project-4"]
数字(5,4)是我的项目ID(@ project.id),我需要在.each do
函数中减去它。
我能找到的所有东西都是针对多个变量的解构解决方案。但在这里我只有1个变量。
任何人都可以帮我解决如何从这个阵列中隔离产品ID的问题吗?
答案 0 :(得分:0)
您可以使用match方法在regex的帮助下获取ID。假设array
由您的id-s 3
和44
的projetcs组成,那么单行将是:
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-part。
单行(array = ["proj3ct-3", "project-1567"]
):
2.0.0-p353 :040 > array.map {|el| el.gsub(/(.*\-)[^\d]*/, "")}
=> ["3", "1567"]
.each do
与之前的match
示例类似。
编辑:如果您希望do
- 块以格式化形式返回已存在的数组,那么您应该使用gsub中的bang-method,如下所示:el.gsub!(/(.*\-)[^\d]*/, "")
这也将改变元素。非爆炸方法仅返回更改值而不更改它们。
万一你不知道并且想要测试/分析你的正则表达式,那么this是一个很好的地方 - 我已经使用了很长一段时间了。另外,重新检查一些基础知识的好地方是here