【问题标题】:Ruby String Arrays Overwriting Themselves?Ruby 字符串数组会覆盖自己吗?
【发布时间】:2015-06-18 04:10:34
【问题描述】:

由于某种原因,操作 mirror[j] = string[i]

将字符串重写为镜像

我不知道为什么会这样,我没有命令它这样做。我的 reverse(string) 函数的输出将停在中间,例如: ABCDEF -> FEDDEF 但我正在尝试做: ABCDEF -> FEDCBA

def reverse(string)
  mirror = string
  i = string.length - 1
  j = 0
  while j < string.length
    mirror[j] = string[i]
    puts(mirror)
    j = j + 1
    i = i - 1
  end
  return mirror
end

【问题讨论】:

  • 你不能只使用ruby string api吗?像 str1.reverse

标签: ruby-on-rails arrays ruby string overwrite


【解决方案1】:

您需要使用#dup。在您的情况下,mirror = string 表示两个变量都持有同一个对象的引用。因此,当您更改对象时,可以通过stringmirror 反映出来。

def reverse(string)
  mirror = string.dup
  i = string.length - 1
  j = 0
  while j < string.length
    mirror[j] = string[i]
    j += 1  # same as j = j + 1
    i -= 1  # same as i = i - 1
  end
  mirror 
  # last expression is returned by default, so you can write only  `mirror` instead of `return mirror`
end

p reverse 'ABCDEF' # "FEDCBA"

【讨论】:

  • 我会投票,但我不能,因为我还没有 15 个声望点!谢谢!
  • 另一个选项根本不复制字符串,而是将&lt;&lt; 字符附加到镜像
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多