Hacker News new | past | comments | ask | show | jobs | submit login
Sorting with order arrays (codecall.net)
1 point by fayyazkl on Dec 6, 2012 | hide | past | favorite | 1 comment



This is done with a straight decorate-sort-undecorate (http://en.wikipedia.org/wiki/Schwartzian_transform). In the simplest case, and in Python:

    "".join(sorted("ccbaba", key=lambda c: "cba".index(c)))
gives "ccbbaa" as the result.

The performance is a function of the query string length and the order string length, because str.index is a linear search. The obvious speedup, should the order string be extremely long, is to turn the order string into a lookup table:

    order = {c: i for i, c in enumerate("bca")}
    "".join(sorted("ccbaba", key=lambda c: order[c]))




Consider applying for YC's Fall 2025 batch! Applications are open till Aug 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: