用Ruby整数位生成布尔数组
好的,我想知道我是否可以用一个整数的位来创建一个布尔值数组。例如,如果我想使用5,它是二进制的101,是否有任何合理的简单方法,我可以得到这样的形式:用Ruby整数位生成布尔数组,ruby,arrays,binary,Ruby,Arrays,Binary,好的,我想知道我是否可以用一个整数的位来创建一个布尔值数组。例如,如果我想使用5,它是二进制的101,是否有任何合理的简单方法,我可以得到这样的形式: [true, false, true] 这个想法是1是真的,0是假的。将其作为一个0和1的数组就足够了,但是true和false更可取 提前感谢您的帮助。这将有效: num = 5 (0...num.bit_length).map { |i| num[i] == 1 } #=> [true, false, true] 或 取决于所需的位
[true, false, true]
这个想法是1是真的,0是假的。将其作为一个0和1的数组就足够了,但是true和false更可取
提前感谢您的帮助。这将有效:
num = 5
(0...num.bit_length).map { |i| num[i] == 1 }
#=> [true, false, true]
或
取决于所需的位顺序。这将起作用:
num = 5
(0...num.bit_length).map { |i| num[i] == 1 }
#=> [true, false, true]
或
取决于所需的位顺序。尝试以下操作:
x = 5.to_s(2).split(//).collect do |n|
n == "1"
end
p x
试试这个:
x = 5.to_s(2).split(//).collect do |n|
n == "1"
end
p x
请看我对一个类似问题的回答: 以下是它的要点: 在Ruby中,整数(即Bignums和fixmums)可以像位数组一样被索引。然而,它们不是可枚举的 当然,你可以解决这个问题:
class Integer
include Enumerable
def each
return to_enum unless block_given?
(size*8).times {|i| yield self[i] }
end
end
稍微不那么麻烦的方法可能是将整数表示为数组:
class Integer
def to_a
Array.new(size*8, &method(:[]))
end
end
然后可以使用Ruby的漂亮的可枚举方法:
请看我对一个类似问题的回答: 以下是它的要点: 在Ruby中,整数(即Bignums和fixmums)可以像位数组一样被索引。然而,它们不是可枚举的 当然,你可以解决这个问题:
class Integer
include Enumerable
def each
return to_enum unless block_given?
(size*8).times {|i| yield self[i] }
end
end
稍微不那么麻烦的方法可能是将整数表示为数组:
class Integer
def to_a
Array.new(size*8, &method(:[]))
end
end
然后可以使用Ruby的漂亮的可枚举方法:
或者简单地收集{n{124; n==1}您也可以说.chars而不是.split//或者简单地收集{n{124; n==1}您也可以说.chars而不是.split//