2

我有 8 个复选框,其值为1, 2, 4, 16, 256, 512, 1024, 4096

取决于选择的内容取决于给定的数字,即:选择了 5 = 1 和 4、20 = 16 和 4、528 = 512 和 16

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

[
  { 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] }
 ] 

但这不是我要找的。

  • 您会搜索什么主题/短语来更好地理解这一点?
  • 在代码中,如何根据显示的数字接收复选框列表?

IE:

def test() {

   def checkBoxList = getCheckBoxList(1536)
   assert checkBoxList == [1024,512]

  checkBoxList = getCheckBoxList(7)
  assert checkBoxList == [4,2,1]

  //etc
}


def getCheckBoxList(int number) {

    //Magic code -- Returns [] of boxes based on number

}
4

1 回答 1

0

从大于参数的 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]
于 2012-12-17T18:02:40.230 回答