我想在 block 中使用 if 条件时遇到问题。更准确地说,我想从数组中获取一个字符串,更改该字符串并在满足特定条件时将其保存回数组。
我有一个名为“leuchtturmgesamtheit”的数组,它由字符串组成。 大多数这些字符串看起来像这样:
ACH-92941100
ACH-92941102
我的目标是聚合这两个字符串。这就是为什么我想重命名字符串,使它们具有相同的名称。为此,我想剪掉最后一个角色。之后我就可以使用 uniq 了!在阵列上。
这是我做的:
leuchtturmgesamtheit.each { |replace|
if replace.count("1234567890")==8
replace=replace[0...-1]
end
}
leuchtturmgesamtheit.uniq!
print leuchtturmgesamtheit
我希望得到:
ACH-9294110
但是我得到了相同的两个字符串。
RubyMine 告诉我,粗体标记的“替换”是赋值后未使用的局部变量。所以问题似乎是 block 内的 if 条件。我做错了什么?
最佳答案
replace=replace[0...-1]
仅更改 block 中局部变量引用的字符串,而不更新数组中的条目。有几个解决方案。
一种是使用each_with_index
并更新数组中的实际字符串:
例如
leuchtturmgesamtheit.each_with_index do |replace, index|
if replace.count("1234567890") == 8
leuchtturmgesamtheit[index] = replace[0...-1]
end
end
另一种是使用 map!
来更新数组,例如
leuchtturmgesamtheit.map! do |entry|
if entry.count("1234567890") == 8
entry[0...-1]
else
entry
end
end
steenslag's answer 也适用于可以在修改现有字符串的方法上完成所需的字符串操作的场景,就像这里的情况一样。
关于ruby - 如何替换 block 中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10736268/