2017-07-27 87 views
4

是否有機會對包含德語變音符(如ä,ö,ü)的密碼查詢結果進行排序?目前,我得到一個按字母排序的列表,並且以變音符號開頭的節點放在列表的末尾。通常他們應該在列表中,例如'Ö'應該等於'OE'。使用德語變元對查詢結果進行排序

任何想法表示讚賞,謝謝。

回答

3

既然你特別問到Cypher支架,下面的查詢是如何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'。

但是,上述方法效率不高,因爲它調用REPLACE函數每個name六次。在Java中編寫user-defined procedure將整個names列表作爲輸入並在單個調用中返回排序列表會更有效率。

+0

謝謝山姆,走的路:) – Balael

1

是的,你可以使用localeCompareIntl.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)

相關問題