5

いくつかのプリミティブ型(整数、浮動小数点数、文字列など)を文字列にエンコードするが、型の辞書式順序を維持するためのライブラリを知っている人はいますか?

理想的には、C ++ライブラリを探していますが、他の言語でも問題ありません。また、フォーマットを文字列自体にエンコードする必要はないと想定できます(つまり、int64 / string / floatの場合、エンコードされた文字列はこの情報をエンコードする必要はなく、データをエンコードするだけで十分です)。

4

4 に答える 4

10

この論文 (「Efficient Lexicographic Encoding of Numbers」) を見てください。これは、数値型を文字列として表現する方法を示しており、文字列の辞書式順序が基になる数値の数値順序と同じになるようにします。任意の長さの数字に対応します。

http://www.zanopha.com/docs/elen.pdf

于 2010-07-29T19:48:34.957 に答える
2

整数と長整数を順序を保持する文字列に変換するという問題がありました。私は Java で作業していたので、符号付きの型しか持っていませんでした。

私のアルゴリズムは非常に単純でした:

  1. 符号ビットを反転します ( toEncode ^ Long.MAX_VALUElong の場合)。それ以外の場合、負の数は正の数よりも大きくなります。
  2. バイトの変更された base64 エンコーディングを実行します。残念ながら、通常の base64 エンコーディングでは順序が保持されません。特殊文字 (+および/) は、文字の後の数字の後にあります。これは ASCII から完全に逆です。私の変更されたエンコーディングは、単に ASCII 順序を使用しています。(通常の base64 ではないことを明確にするために、特殊文字をパディングとして-および_に変更し~ました。これらは URL 内で引き続き使用できますが、これは私が持っていた別の制約でした。)
于 2012-07-07T23:44:58.877 に答える
2

ところで... Amazon Web ServiceのSimpleDBでは、すべてのデータが文字列として保存されます。その選択コンパレータは、辞書式順序付けを使用します。AWS は、さまざまな型をエンコードするためのユーティリティ関数を提供します。たとえば、整数は、事前に整数の範囲を認識し、ゼロパディングとオフセットを介して調整してエンコードされます(たとえば、負の整数の場合)。もちろん、可能な限り最悪の範囲を指定することもできます。

「クエリ 201: Amazon SimpleDB クエリのヒントとコツ」を参照してください - http://aws.amazon.com/articles/1232

http://typica.s3.amazonaws.com/com/xerox/amazonws/sdb/DataUtils.html

于 2013-02-19T03:33:37.560 に答える
-1

固定の列幅に数値を先頭にゼロを付けて書き込むだけで、文字列は通常どおりです。このように:

0.1 -> 0000000.1000000
123 -> 0000123.0000000
foo -> foo
X   -> X

次に、テキストとして並べ替えることができます (例:sortなしの Unix -n)。どのようにそのことについて?

于 2009-11-19T13:02:06.467 に答える