<div dir="ltr">Hi everyone,<div><br></div><div>Earlier this week I needed to be able sort a slice containing unit names and machine ids in a way that would make sense to a human. For example, a conventional string sort would order a list of machine ids like this:</div><div><br></div><div><font face="monospace, monospace">0</font></div><div><font face="monospace, monospace">10</font></div><div><font face="monospace, monospace">3</font></div><div><span style="font-family:monospace,monospace">3/lxd/1</span><br></div><div><font face="monospace, monospace">3/lxd/10</font></div><div><span style="font-family:monospace,monospace">3/lxd/11</span><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">3/lxd/2</font></div><div><font face="monospace, monospace">4</font></div><div><br></div><div>when what I really wanted was:</div><div><font face="monospace, monospace"><br></font></div><div><div><font face="monospace, monospace">0</font></div><div><font face="monospace, monospace">3</font></div><div><span style="font-family:monospace,monospace">3/lxd/1</span><br></div><div><font face="monospace, monospace">3/lxd/2<br></font></div><div><font face="monospace, monospace">3/lxd/10</font></div><div><span style="font-family:monospace,monospace">3/lxd/11</span><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">4</font></div></div><div><div><font face="monospace, monospace">10</font></div></div><div><br></div><div>Tim pointed me at something that Anastasia had already done for formatting the output from some Juju CLI commands. This was close so I extracted it to <a href="http://github.com/juju/utils">github.com/juju/utils</a> and generalised it. An in-place sort can be performed like this:</div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">utils.SortStringsNaturally(someSliceOfStrings)</font><br></div><div><br></div><div>The implementation is here:<br></div><div><br></div><div><a href="https://github.com/juju/utils/blob/master/naturalsort.go">https://github.com/juju/utils/blob/master/naturalsort.go</a><br></div><div><a href="https://github.com/juju/utils/blob/master/naturalsort_test.go">https://github.com/juju/utils/blob/master/naturalsort_test.go</a><br></div><div><br></div><div>Consider using it if your code needs to sort machine ids, unit names, tag strings, IP addresses and any other slice of strings which contain sections of digits.</div><div><br></div><div>- Menno</div><div><br></div><div><br></div><div><br></div></div>