Guest User

Untitled

a guest
Jun 19th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.93 KB | None | 0 0
  1. import nimpy # required version must be greater than "0.1.0"
  2. from algorithm import sort
  3.  
  4. let op = pyImport("operator")
  5. let pyuca = pyImport("pyuca") # pip install pyuca
  6. let pyucaCollator = pyuca.Collator()
  7. let icu = pyImport("icu") # pip install pyicu
  8. let icuCollator = icu.Collator.createInstance() # for Locale support: icu.Collator.createInstance(icu.Locale("de"))
  9.  
  10. template cmpPython(a, b): int =
  11. op.sub(op.gt(a, b), op.gt(b, a)).to(int)
  12.  
  13. proc cmpUcaPyicu*(a, b: string): int =
  14. ## very good performance, harder to install
  15. let keyA = icuCollator.getSortKey(a)
  16. let keyB = icuCollator.getSortKey(b)
  17. return cmpPython(keyA, keyB)
  18.  
  19. proc cmpUcaPyuca*(a, b: string): int =
  20. ## bad performance, easy to install
  21. let keyA = pyucaCollator.sort_key(a)
  22. let keyb = pyucaCollator.sort_key(b)
  23. return cmpPython(keyA, keyB)
  24.  
  25. when isMainModule:
  26. var s = @[
  27. "cafe", "caff", "café"
  28. ]
  29. s.sort(cmp=cmpUcaPyuca)
  30. assert s == @["cafe", "café", "caff"]
Add Comment
Please, Sign In to add comment