与所有阵列成员进行OR

时间:2014-02-06 11:23:39

标签: ruby bitmask

假设我有一个数组[1,2,3,4],我希望1 | 2 | 3 | 4语言中的Ruby

如何更快地写出来?

实际上,我刚刚在CoderWall阅读了一篇关于bitmask的文章,我想知道settings何时有很多选项,例如1015,我认为写(1 << 1 | 1 << 2 | 1 << 3 ... | 1 << 15).to_s(2)太长了。

有没有办法把它写得更短?

1 个答案:

答案 0 :(得分:7)

怎么样:

[1,2,3,4].inject(:|)

要创建位掩码,我会这样做:

[1,2,3,4].map(&1.method(:<<)).inject(0, :|)

如果您不想迭代两次,只需在数组后添加.lazy

[1,2,3,4].lazy.map(&1.method(:<<)).inject(:|)