这种迭代反向方法在Ruby中是如何工作的?

这种迭代反向方法在Ruby中是如何工作的?,ruby,reverse,Ruby,Reverse,在过去的两个月里,我一直在建立一些小程序,同时也在网上学习一些课程来帮助我学习编码。事情进展顺利,我觉得我要问的问题比我写的一些东西简单 下面是两种反转字符串的方法。我理解方法2,我不理解方法1是如何工作的。它们都给出相同的输出。有人能解释第一种方法是如何工作的吗 一, 让我们说string='Hello' 当i=0时,string[0]指的是H,reversed\u string指的是```。因此,在reversed\u string=string[i]+reversed\u string之后

在过去的两个月里,我一直在建立一些小程序,同时也在网上学习一些课程来帮助我学习编码。事情进展顺利,我觉得我要问的问题比我写的一些东西简单

下面是两种反转字符串的方法。我理解方法2,我不理解方法1是如何工作的。它们都给出相同的输出。有人能解释第一种方法是如何工作的吗

一,


让我们说
string='Hello'

i=0
时,
string[0]
指的是
H
reversed\u string
指的是```。因此,在
reversed\u string=string[i]+reversed\u string
之后,
reversed\u string
H

i
然后递增

i=1
时,
string[1]
指的是
e
reversed\u string
指的是
H
。因此,在
reversed\u string=string[i]+reversed\u string
之后,
reversed\u string
eH
e
连接到
reversed\u字符串的前面

i
然后递增

i=2
时,
string[2]
指的是
l
reversed\u string
指的是
He
。因此,在
reversed\u string=string[i]+reversed\u string
之后,
reversed\u string
leH
l
连接到
反向\u字符串的前面

i
然后递增


循环一直持续到
i
等于
string.length
,这意味着没有更多的字母可以移动到前面。

第一种方法是简单地将原始字符串的每个字符前置到一个新字符串,这会导致字符串本身的反转

string[i]+反向字符串
表示:

  • 取字符串的第i个位置
  • 将其前置到
    反向\u字符串
由于
反向\u字符串
开始时为空,因此此操作非常方便

对于字符串“apples”,这将导致:

  • 'a'+'
  • 'p'+'a'
  • 'p'+'pa'

…等等。

我鼓励您在终端中打开
irb
,并试验此方法的每一行会产生什么影响。你可以阅读世界上所有的解释,但你只能通过输入内容并在屏幕上看到输出,才能对语言的工作原理有一个坚实的感觉

字符串基本上是一个数组或一长串字符,例如
[“H”、“e”、“l”、“l”、“o”]
。方法1设置一个
while
循环,该循环对字符串中的每个字符重复执行一次操作。更具体地说,它在每个位置获取字符(
string[i]
),并将其添加到“result”字符串(
reversed\u string
)的开头,该字符串逐渐增长,直到与原始字符串一样长。除了每个字母都添加到结果字符串的开头之外,因此如果原始字符串是“Hello!”,则结果字符串将以
“H”
开头,然后将变为
“eH”
,然后变为
“leH”
,依此类推

大局注:如果你是第一次学习编程,这一切都很好;Ruby是一种很棒的语言选择,拥有一个繁荣友好的社区,这种
for
while
循环是大多数语言的主要形式,非常值得学习和实践。但是您应该知道,方法1中使用的逻辑不是惯用的Ruby;是的,它可以很好地工作,但我认为大多数经验丰富的Ruby开发人员会看到这些代码,然后说“哎呀,你为什么不把数组放在上面运行
。每个
”?Ruby是一种非常灵活的语言,但某些代码模式已经成为常见的或“最喜欢的”实践,根据我的经验,使用整数单步执行
,而
循环的结构不在其中


请记住这一点,一旦你掌握了目前的学习材料,考虑四处寻找一个可以在Ruby方式中教你露比的课程。这很简单。如果通常你不知道如何分析算法,最好的方法是选择一个例子(比如
string=“fun”
),然后在纸上执行程序。(“
reversed_string
开始时为空,
i
开始时为
0
i
小于
3
,因此我们继续循环;然后
reversed_string
变为
“f”+”“
,它是
f
i
现在是
1
1
仍然小于
3
反转的字符串现在是
“u”+“f”
,也就是
“uf”
…)如果您在理解该代码时有任何具体问题,问一个具体的问题。@Amadan:你真的应该回答这个问题。让你知道,一个有经验的Rubiests永远不会写出一个看起来像#1的方法。这是伪装成Ruby的C。可以使用枚举器。例如:
def reverse(字符串);string.each|char.reduce(“”){s,c|c+s};结束
。让我们试试:
倒转(“aibohphobia”)#=>“aibohphobia”
。(这个词的意思是“害怕回文”。)
def reverse(string)
  reversed_string = ""

  i = 0
  while i < string.length
    reversed_string = string[i] + reversed_string

    i += 1
  end

  return reversed_string
end
def rev(string)
  string.reverse
end