目前我将一组项目的组合存储为单个整数(位掩码值),如下例所示:
1 - Orange
2 - Banana
4 - Cherry
8 - Apple
然后,如果用户选择橙色( 1 )和 Apple ( 8 ),则总和那些 9 。
并且只有当这两个项目合并时,这个值才是 9 。
并且您可以恢复用于生成此数字的原始两个数字。
以下是一个示例网站: http://www.tfxsoft.com/playground/calc.php
我需要一个algoritm(最好是在Ruby中),它将获取这两个位掩码值的和(9)并返回它包含的值#34; (1和4)。
答案 0 :(得分:1)
据我所知,你想找到位的位置。这是简单但不是最佳的解决方案:
2.1.5 :033 > 9.to_s(2).reverse.chars.map.with_index { |b, i| b == "1" ? i + 1 : nil }.compact
=> [1, 4]
答案 1 :(得分:1)
我认为这可能就是你要找的东西:
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"}