当前,我将一组项的组合存储为单个整数(位屏蔽值),如下例所示:
例子:
1 - Orange
2 - Banana
4 - Cherry
8 - Apple
然后如果用户选择橙色(1)和苹果(8),那么它们的总和是9。
只有当这两项合并时,这个值才是9。
你可以恢复原来用来生成这个数字的两个数字。
下面是一个网站的例子:
http://www.tfxsoft.com/playground/calc.php
我需要的是:
我需要一个算法(更喜欢用ruby),它将取这两个位掩码值的和(9)并返回它“包含”的值(1和4)。
最佳答案
我想这可能就是你要找的:
FRUIT = { 1 => 'Orange', 2 => 'Banana', 4 => 'Cherry', 8 => 'Apple' }
def mask_fruit(a, b) a | b end
def unmask_fruit(masked)
FRUIT.select { |k, _| (masked | k) == masked }
end
mask = mask_fruit 1, 8 # => 9
unmask_fruit mask # => {1=>"Orange", 8=>"Apple"}