奇妙な要件があり、頭を動かすことができないようです。テキスト文字列を受け取り、その文字列に対応する数値を返す関数を考え出す必要があります。これにより、並べ替えたときに、これらの数値が元の文字列と同じ順序になります。たとえば、関数がこのマッピングを生成する場合、次のようになります。
"abcd" -> x
"abdef" -> y
"xyz" -> z
その場合、番号は次のようにする必要がありますx < y < z
。文字列は任意の長さにすることができますが、常に空ではなく、文字列の比較では大文字と小文字を区別しない必要があります(つまり"ABC"
、"abc"
同じ数値になるはずです)。
私の最初の方法は、各文字を対応する1から26までの数字にマッピングし、結果の数字を取得することでした。たとえばa = 1, b = 2, c = 3, ..., z = 26
、次の"abc"
ようになり1*26^2 + 2*26 + 3
ます。しかし、テキスト文字列には任意の言語(つまり完全なUnicode)の任意のテキストを含めることができることに気付きました。したがって、これは機能しません。この時点で私は立ち往生しています。クライアントにやめろと言う前に、他に何かアイデアはありますか?
PSこの奇妙な要件は、数値フィールドによる並べ替えしかできない独自のシステムの制限によるものです。他のフィールドタイプで並べ替えが必要な場合は、数値表現に変換してから並べ替える必要があります。聞かないで。