Ruby 我怎样才能把一串整数倒过来呢?

Ruby 我怎样才能把一串整数倒过来呢?,ruby,Ruby,我正在尝试将字符串“10010”转换为“01101”。我想我可以尝试使用gsub方法,如ruby文档指南中的类似示例所示: `"10010".gsub(/[10]/ "1" => "0", "0" => "1")` . 但事实并非如此。我认为gsub的论点是不正确的。根据我的逻辑,我捕获的是一个整数1和0,而不是字符串,但我不太确定如何进行。是否有一种方法可以替换.push/.pop等数字,然后将整数更改为字符串?如果您不关心效率(就像您三次读取字符串一样): 至于你的方法,你确定

我正在尝试将字符串
“10010”
转换为
“01101”
。我想我可以尝试使用
gsub
方法,如ruby文档指南中的类似示例所示:

`"10010".gsub(/[10]/ "1" => "0", "0" => "1")` .

但事实并非如此。我认为gsub的论点是不正确的。根据我的逻辑,我捕获的是一个整数1和0,而不是字符串,但我不太确定如何进行。是否有一种方法可以替换.push/.pop等数字,然后将整数更改为字符串?

如果您不关心效率(就像您三次读取字符串一样):

至于你的方法,你确定你没有漏掉一个逗号吗

irb(main):004:0> puts "10010".gsub("1", "X").gsub("0", "1").gsub("X", "0")
01101

你的方法是有效的,你只是缺少了一个逗号:

"10010".gsub(/[01]/, "1" => "0", "0" => "1")
#=> 01101

虽然您可以使用
gsub
,但请使用正确的方法,并旋转位:

("10010".to_i(2) ^ 0xff).to_s(2) # => "11101101"
使用
gsub
会导致错误答案,因为
01101
与反转8位数字的位不同:

'01101'.to_i(2) # => 13
'11101101'.to_i(2) # => 237
这可能有助于您了解发生了什么:

'%08b' % 0x55 # => "01010101"
'%08b' % 0xff # => "11111111"
'%08b' % 0xaa # => "10101010"

'%08b' % (0x55 ^ 0xff) # => "10101010"

要将任何
0
更改为
1
,反之,不需要
gsub
,该方法更简单、更快速:

'1010'.tr('10', '01')
# => "0101"

'10010'.tr('10', '01')
# => "01101"

谢谢你。我很感激。谢谢这个更好的版本。我很感激。
'1010'.tr('10', '01')
# => "0101"

'10010'.tr('10', '01')
# => "01101"