Groovy 选中复选框';这是基于一个数字

Groovy 选中复选框';这是基于一个数字,groovy,checkbox,binary,Groovy,Checkbox,Binary,我有8个复选框,它们的值分别为1,2,4,16,256,512,1024,4096 取决于选择的内容取决于我得到的数字,即:5=1和4被选择,20=16和4,528=512和16 现在我了解了如何通过手动计算或创建地图来找出选中的复选框。即 [ { number: 1, boxes: [1] }, { number: 2, boxes: [2] }, { number: 3, boxes: [1,2] }, { number: 4, boxes: [4] }, { numb

我有8个复选框,它们的值分别为
1
2
4
16
256
512
1024
4096

取决于选择的内容取决于我得到的数字,即:5=1和4被选择,20=16和4,528=512和16

现在我了解了如何通过手动计算或创建地图来找出选中的复选框。即

[
  { number: 1, boxes: [1] }, 
  { number: 2, boxes: [2] },
  { number: 3, boxes: [1,2] },
  { number: 4, boxes: [4] },
  { number: 5, boxes: [4,1] },
  { number: 6, boxes: [4,2] },
  { number: 7, boxes: [4,2,1] }
 ] 
但这不是我想要的

  • 为了更好地理解这一点,您会搜索什么主题/短语
  • 在代码中,如何根据 出示的号码
即:


从大于参数的下一个值2的倍数开始,然后减去其他倍数。对你的案子有用吗

def getCheckBoxList(int number) {
  def list = []
  Integer filter = 1

  while(filter < number) { filter *= 2 }

  filter /= 2

  while (filter != 0) {
    if (filter <= number) {
      list << filter
      number -= filter
    }

    filter /= 2
  }

  list
}

assert getCheckBoxList(1536) == [1024,512]
assert getCheckBoxList(7) == [4,2,1]
assert getCheckBoxList(17) == [16, 1]
assert getCheckBoxList(15) == [8, 4, 2, 1]
assert getCheckBoxList(29) == [16, 8, 4, 1]
assert getCheckBoxList(528) == [512, 16]
def getCheckBoxList(整数){
def列表=[]
整数过滤器=1
而(filter如果(filter)这是什么语言/平台?Java/Groovy/C#,任何都可以,示例中的代码都是Groovy。非常感谢,这正是我所寻找的,也请看,最终这就是我试图使用枚举和位运算符实现的。
def getCheckBoxList(int number) {
  def list = []
  Integer filter = 1

  while(filter < number) { filter *= 2 }

  filter /= 2

  while (filter != 0) {
    if (filter <= number) {
      list << filter
      number -= filter
    }

    filter /= 2
  }

  list
}

assert getCheckBoxList(1536) == [1024,512]
assert getCheckBoxList(7) == [4,2,1]
assert getCheckBoxList(17) == [16, 1]
assert getCheckBoxList(15) == [8, 4, 2, 1]
assert getCheckBoxList(29) == [16, 8, 4, 1]
assert getCheckBoxList(528) == [512, 16]