Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 来自字符串的位数组_Arrays_Ruby_String_Byte_Bit - Fatal编程技术网

Arrays 来自字符串的位数组

Arrays 来自字符串的位数组,arrays,ruby,string,byte,bit,Arrays,Ruby,String,Byte,Bit,我有一根绳子: cipher = "0111101110010111001001010000000110101000001000111101110000110101100100001100101100000" 我想将其切片并存储在数组中,如下所示: [01110110010111…] 我尝试了此代码,但出现了一个错误: cz.rb:16:in:未定义的methodpush用于nil:NilClass 命名者 这个怎么了? 它是ruby。您正试图推送到cipher_byte[j],正如错误告诉您

我有一根绳子:

cipher = "0111101110010111001001010000000110101000001000111101110000110101100100001100101100000"
我想将其切片并存储在数组中,如下所示: [01110110010111…]

我尝试了此代码,但出现了一个错误:

cz.rb:16:in:未定义的methodpush用于nil:NilClass 命名者

这个怎么了? 它是ruby。

您正试图推送到cipher_byte[j],正如错误告诉您的,它还没有设置为值。在循环的第一次迭代中,可以想象cipher_字节的长度为0,因为它被设置为[]。因此,您还不能使用[j]对其进行索引


您可能需要cipher_byte.push,而不是尝试将其推到特定位置。在Ruby中,.push-on数组会将该值添加到数组的末尾;您不需要用j引用该位置。

您正在索引一个空数组密码字节,并且得到nil。然后对nil的一个实例调用push

您需要每一次etc迭代创建一个新数组,然后将该子数组推送到主数组

最简单的:

cipher.each_char.each_slice(8).map(&:join)
更快:

(0...cipher.length).step(8).map { |i| cipher[i, 8] }

代码越少意味着只要代码仍然可读,错误可能隐藏的位置就越少。Ruby提供了许多习惯用法和方法,使程序员能够非常直观和轻松地完成任务。带计数器的while循环很少是红色的;带有无条件递增计数器的while循环永远不会出现。

您的密码字符串包含85个字符。剩下的5个字符该如何处理?@KarolMazurek:检查j的值。我敢打赌,在发生错误时,它是cipher_字节数组之外的索引。您还不能使用[j]对其进行索引–您可以。如果索引超出范围,数组[]返回nil。这就是为什么OP得到的是nil的nomethoderor,而不是索引器注意,如果不能被8整除,这个解决方案将省略尾随字符。aka,将cipher_byte[j]| |=[]放在行cipher_byte[j].pushcipher[i]之前。它将当前密码_字节[j]分配给一个空数组(如果它当前为falsy)。
cipher.scan(/.{8}/)
  #=> ["01111011", "10010111", "00100101", "00000001", "10101000",
  #    "00100011", "11011100", "00110101", "10010000", "11001011"]
cipher.scan(/.{8}/)
  #=> ["01111011", "10010111", "00100101", "00000001", "10101000",
  #    "00100011", "11011100", "00110101", "10010000", "11001011"]