假设我有一个数组[1,2,3,4]
,我希望1 | 2 | 3 | 4
语言中的Ruby
如何更快地写出来?
实际上,我刚刚在CoderWall阅读了一篇关于bitmask
的文章,我想知道settings
何时有很多选项,例如10
或15
,我认为写(1 << 1 | 1 << 2 | 1 << 3
... | 1 << 15).to_s(2)
太长了。
有没有办法把它写得更短?
答案 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(:|)