Ich möchte prüfen, ob ein Wert einer Gruppe von Flags (aus einer Enumeration oder einem Objekt) entspricht.verifizieren (bitweise) wenn ein Wert mit mehreren spezifischen Flags einer Enum übereinstimmt
Gerade jetzt, ich habe mit der folgenden Funktion in Javascript (3 lobt das Snippet): kommen
function hasFlags(flags, value) {
let s = flags.reduce((sum, v) => sum += v, 0);
return (s & value) === s
}
FLAGS = {
STEP_0: 1 << 0,
STEP_1: 1 << 1,
STEP_2: 1 << 2,
STEP_3: 1 << 3,
STEP_4: 1 << 4,
STEP_5: 1 << 5,
STEP_6: 1 << 6,
STEP_7: 1 << 7
}
const needed = [
FLAGS.STEP_2,
FLAGS.STEP_3,
FLAGS.STEP_6,
]
console.log(hasFlags(needed, 4)); // false
console.log(hasFlags(needed, 8)); // false
console.log(hasFlags(needed, 64)); // false
console.log(hasFlags(needed, 4 + 8)); // false
console.log(hasFlags(needed, 4 + 64)); // false
console.log(hasFlags(needed, 8 + 64)); // false
console.log(hasFlags(needed, 4 + 8 + 64)); // true
console.log(hasFlags(needed, 4 + 8 + 64 + 1)); // true
console.log(hasFlags(needed, 4 + 8 + 64 + 2)); // true
console.log(hasFlags(needed, 4 + 8 + 64 + 1 + 2)); // true
// etc...
In Python die Funktion würde wie folgt aussehen:
def hasFlags(flags, value):
s = sum(flags)
return (s & value) == s
print hasFlags((4,8,64), 4) # False
print hasFlags((4,8,64), 4+8+64) # True
# ...
Gibt es einen besseren Weg (das heißt, idiomatischer ... oder mehr Python), um die gleiche Verifikation zu machen?
Bearbeiten: Lösungen in Python und Javascript sind willkommen, aber ich bin besonders auf der Suche nach einem Algorithmus (unabhängig von der Sprache), wie ich viel im Internet gesucht und nie gefunden habe, während es mir scheint Es ist ein häufiges Problem.
Was meinst du mit mehr Python? das scheint mir ok zu sein. Vielleicht bin ich falsch. – scharette