使用Ruby整数位来生成bool数组

时间:2014-04-20 17:34:45

标签: ruby arrays binary

好的,所以我想知道是否可以使用它的位从整数创建一个布尔值数组。例如,如果我想使用5,即二进制中的101,那么我是否有任何合理简单的方法可以获得以下形式:

[true, false, true]

这个想法是一个人是真的,零是假的。将它作为一个零和一的数组就足够了,但是真假会更好。

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

试试这个:

x = 5.to_s(2).split(//).collect do |n|
  n == "1"
end

p x

答案 1 :(得分:2)

这样可行:

num = 5
(0...num.bit_length).map { |i| num[i] == 1 }
#=> [true, false, true]

(0...num.bit_length).map { |i| num[i] == 1 }.reverse
#=> [true, false, true]

取决于所需的位顺序。

答案 2 :(得分:0)

请参阅我的回答类似的问题:Looping through bits in an integer

这是它的要点:

  

在Ruby中,Integer s(即BignumFixnum s)已经被编入索引,就好像它们是位数组一样。但是,它们不是Enumerable

     

但你可以解决这个问题,当然:

class Integer
  include Enumerable

  def each
    return to_enum unless block_given?      
    (size*8).times {|i| yield self[i] }
  end
end
     

稍微不那么干扰的方式可能是将Integer表示为数组:

class Integer
  def to_a
    Array.new(size*8, &method(:[]))
  end
end
     

然后你可以使用Ruby的漂亮Enumerable方法:

5.to_a.map {|b| !b.zero? }
# => [true, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]