我知道如何在没有 .reverse 的情况下反转 ruby 中的字符串,但是有没有办法只反转奇数索引字符?

问题描述 投票:0回答:3

我知道如何在 ruby 中反转字符串而无需使用反向方法

def reverse(string)
 
string.each_char.inject(""){|str, char| str.insert(0, char) }

end
puts reverse('hello world')

但是有没有办法我可以只反转奇数索引,使其看起来像这样。

output: hlloo wlred
ruby-on-rails ruby
3个回答
1
投票

这是一个有趣的问题,这是我想到的:

def funky_reverse(str)
  out = ""
  str.length.times{|i| out+= i.even? ? str[i] : str[-i-1]}
  out
end

1
投票

我的做法是这样的:

def odd_reverse(str)
  a = [str, str.reverse]
  str.size.times.map {|i| a[i % 2][i] }.join
end

odd_reverse("hello world")
# => "hlloo wlred"

这很简单。对于每个字符索引

i
,它交替 (
i % 2
) 从字符串或其反向 (
[s, s.reverse]
) 中获取下一个字符。


0
投票

根据 Les Nightingill 的答案,我想出了这个方法,它使用

reference_index
变量来处理奇数和偶数长度的字符串,以指向字符串的末尾或根据需要稍微超过它。

def funky_reverse(str)
  out = ''
  reference_index = str.length.odd? ? str.length - 1 : str.length
  str.length.times{ |i| out += i.even? ? str[i] : str[reference_index - i] }
  out
end
> funky_reverse('hello world')
=> "hlloo wlred"
> funky_reverse('hello world!')
=> "h!lloow rlde"

这看起来像是一个家庭作业问题? :D

© www.soinside.com 2019 - 2024. All rights reserved.