ruby - 如何替换 block 中的字符串

标签 ruby arrays string if-statement block

我想在 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/

相关文章:

C 编程 - 将一个单词添加到数组中,然后打印数组中的内容

swift - 从 UIAlertController 中的 UITextField 获取字符串 (Swift)

ruby-on-rails - Ubuntu 14.04 Rails 丢失文件

javascript - 减去后自动填充输入

ruby-on-rails - 运行 rails server 时出现 SegFault

javascript - Js从数组中删除元素而不改变原始元素

iPhone stringWithCString 已弃用

.net - .Net:空字符串不是空格字符吗?

ruby-on-rails - 在 Substruct 中设置 Paypal 帐户

ruby-on-rails - 在函数末尾添加更多代码