単語の「スコア」を計算して、Redisで並べ替えられたセット(アルファベット順にリストされた単語)の辞書式順序を決定するために使用しようとしています。
この投稿を読むと、次のように書かれています。
単語をスコアに変える方法は?
たとえば、最初の4文字を使用してスコアを生成する場合、次のルールが適用されます。
スコア=最初のバイト値*(256 ^ 3)+ 2番目のバイト値*(256 ^ 2)+ 3番目のバイト値*(256 ^ 1)+4番目のバイト値
単語の長さが4文字未満の場合は、存在しない文字を合計から省略してください。
なぜこれが機能するのですか?あなたはバイトをradis-256の数字の数字と見なしているだけです:)
この理論で、私はこれがPHP配列で機能するかどうかをテストするために次のコードを思いつきました。
$words = array('abcd', 'hello', 'dogs', 'hiya');
$newWords = array();
foreach ($words as $word) {
$len = strlen($word);
if ($len > 4) {
$len = 4;
}
$i = 0;
$j = $len - 1;
$score = 0;
while ($i < $len) {
$byte = ord($word[$i]);
if ($j == 0) {
$score += $byte;
}
else {
$score += $byte * (256 ^ $j);
}
$i++;
$j--;
}
$newWords[$score] = $word;
}
ksort($newWords);
print_r($newWords);
ただし、これは次のようになります。
Array
(
[75950] => abcd
[80858] => hello
[81124] => dogs
[85220] => hiya
)
これはアルファベット順ではありません。
誰かが問題を見つけることができますか(明らかにスコアの計算は間違っています)?投稿を誤解した可能性があります:-/