Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import nimpy # required version must be greater than "0.1.0"
- from algorithm import sort
- let op = pyImport("operator")
- let pyuca = pyImport("pyuca") # pip install pyuca
- let pyucaCollator = pyuca.Collator()
- let icu = pyImport("icu") # pip install pyicu
- let icuCollator = icu.Collator.createInstance() # for Locale support: icu.Collator.createInstance(icu.Locale("de"))
- template cmpPython(a, b): int =
- op.sub(op.gt(a, b), op.gt(b, a)).to(int)
- proc cmpUcaPyicu*(a, b: string): int =
- ## very good performance, harder to install
- let keyA = icuCollator.getSortKey(a)
- let keyB = icuCollator.getSortKey(b)
- return cmpPython(keyA, keyB)
- proc cmpUcaPyuca*(a, b: string): int =
- ## bad performance, easy to install
- let keyA = pyucaCollator.sort_key(a)
- let keyb = pyucaCollator.sort_key(b)
- return cmpPython(keyA, keyB)
- when isMainModule:
- var s = @[
- "cafe", "caff", "café"
- ]
- s.sort(cmp=cmpUcaPyuca)
- assert s == @["cafe", "café", "caff"]
Add Comment
Please, Sign In to add comment