ich sehr lange Integer-Sequenzen haben, die wie folgt aussehen (beliebiger Länge!):Encode/komprimieren Folge von sich wiederholenden Zahlen
0000000001110002220033333
Jetzt brauche ich einige Algorithmus diese Zeichenfolge in so etwas wie
komprimiert zu konvertierena9b3a3c3a2d5
Das bedeutet "a 9 mal, dann b 3 mal, dann 3 mal" und so weiter, wobei "a" für 0 steht, "b" für 1, "c" für 2 und "d" für 3.
Wie würden Sie das tun? Bisher kam mir nichts passendes in den Sinn, und ich hatte kein Glück mit Google, weil ich nicht wirklich wusste, wonach ich suchen sollte. Wie heißt diese Art der Kodierung/Komprimierung?
PS: Ich werde die Codierung mit PHP, und die Dekodierung in JavaScript zu tun.
Bearbeiten: Vielen Dank!
endete ich mit dieser Funktion für die Codierung bis:
protected function numStringToRle($s){
$rle = '';
$count = 1;
$len = strlen($s);
for($i = 0; $i < $len; $i++){
if($i != $len && isset($s[$i+1]) && $s[$i] == $s[$i+1]){
$count++;
} else {
$rle .= chr($s[$i] + 97).($count == 1 ? '' : $count);
$count = 1;
}
}
return $rle;
}
Und das für die Decodierung:
var decodeCoords = function(str) {
str = str.replace(/(.)(\d+)/g, function(_, x, n) {
return new Array(parseInt(n, 10) + 1).join(x);
});
return str.
replace(/a/g, '0').
replace(/b/g, '1').
replace(/c/g, '2').
replace(/d/g, '3');
};
Was genau Sie diese mit für? Sind Sie sicher, dass Sie es nicht einfach mit Gzip komprimieren können? http: // Stapelüberlauf.com/questions/294297/javascript-implementation-of-gzip Es wird zeitlich und räumlich effizienter sein, und es ist bereits für Sie getan. – ryeguy
gzip ist keine Option, weil ich es mit Javascript dekodieren muss. Ich verwende es als eine Art Bitmaske für ein 2D-Spiel. – Alex