2017-07-27 12 views
4

でクエリ結果を並べ替えると、ä、ö、üのようなドイツのウムラウトを含むサイファークエリの結果を並べ替えることができますか?現時点ではアルファベット順のソートリストが得られ、ウムラウトで始まるノードはリストの最後に置かれます。通常、それらはリストの中になければなりません。 'Ö'は 'OE'と等しくなければなりません。ドイツ語のウムラウト

ありがとう、感謝します。

答えて

3

あなたはサイファーについて、具体的尋ねたので、下記のクエリがあるかのようにumlauted文字を並べ替える方法の例ですが彼らは結紮された等価物でした(例えば、 'UE'のように 'Ü'を扱うなど)。

WITH ['Dorfer', 'Dörfener'] AS names 
UNWIND names AS name 
RETURN name 
ORDER BY 
    REDUCE(s = name, x IN [ 
    ['ä', 'ae'], ['Ä', 'AE'], 
    ['ö', 'oe'], ['Ö', 'OE'], 
    ['ü', 'ue'], ['Ü', 'UE']] | 
    REPLACE(s, x[0], x[1])); 

上記のクエリは、「Dörfener」を最初に返し、「Dorfer」を2番目に返します。

ただし、nameごとにREPLACE関数を6回呼び出すため、上記の手法はあまり効率的ではありません。 Javaのuser-defined procedureを書くと、namesリスト全体を入力として取り上げ、ソートされたリストを1回の呼び出しで返すほうがはるかに効率的です。

+0

ありがとうサム、行く方法:) – Balael

1

はい、あなたはこれを達成するためにlocaleCompareまたはIntl.Collatorを使用することができます。

// Our original array 
 
// Outputs ["u", "x", "ü", "ü", "ü"] 
 
const input1 = ['ü','u','ü','x','ü']; 
 
const output1 = input1.sort(); 
 
console.log(output1); 
 

 
// Intl.Collator 
 
// Outputs ["u", "ü", "ü", "ü", "x"] 
 
const input2 = ['ü','u','ü','x','ü']; 
 
const output2 = input2.sort(Intl.Collator().compare); 
 
console.log(output2) 
 

 
// localeCompare 
 
// Outputs ["u", "ü", "ü", "ü", "x"] 
 
const input3 = ['ü','u','ü','x','ü']; 
 
const output3 = input3.sort(function (a, b) { 
 
    return a.localeCompare(b); 
 
}); 
 
console.log(output3)

関連する問題