我有一串数字07917142299099F0,我想交换每对字符。因此字符串变为701917249209990F。我还没有真正使用过Ruby,所以我不确定这是否可行。谢谢!
答案 0 :(得分:5)
您可以使用正则表达式替换:
str.gsub(/(.)(.)/, '\2\1')
答案 1 :(得分:4)
您可以:
'07917142299099F0'
.chars # ["0", "7", "9", "1", "7", "1", "4", "2", "2", "9", "9", "0", "9", "9", "F", "0"]
.each_slice(2) #<Enumerator: ["0", "7", "9", "1", "7", "1", "4", "2", "2", "9", "9", "0", "9", "9", "F", "0"]:each_slice(2)>
.flat_map(&:reverse) # ["7", "0", "1", "9", "1", "7", "2", "4", "9", "2", "0", "9", "9", "9", "0", "F"]
.join # "701917249209990F"
其他方式:
p str.gsub(/(.{2})/) { Regexp.last_match.to_s.reverse } # "701917249209990F"
请注意,如果字符串中的元素数量为奇数,这可能无法正常工作。
答案 2 :(得分:0)
尽管我更喜欢@Sagar的解决方案,但出于多样性的考虑,这是另一个。
def reverse_each_pair(str)
nbr_even_chars = 2*(str.size/2)
nbr_even_chars.times.with_object('') do |i,s|
s[i] = str[i.odd? ? (i-1) : i+1]
end << str[-1, str.size-nbr_even_chars]
end
reverse_each_pair '07917142299099F0'
#=> "701917249209990F"
reverse_each_pair '07917142299099F'
#=> "70191724920999F"