Hi! 

I am writing a tool that handles files and generates some sorted
output. Since this tool is to be a replacement for part of
another system (written in C#/.NET), the output must be a
byte-exact duplicate.

The existing system generates some checksums and filenames in a
stable sorted order, like so (also pastebinned at
https://dpaste.org/MLMv):

```
addons/rhs_bmp.pbo 2D08606D9BCB43E37A44CDBCD753F663
addons/rhs_bmp.pbo.rhsafrf.0.5.6.bisign 4F0BAAFDDC2C3474F7B310BAF221C22E
addons/rhs_bmp_camo.pbo 5A9AED2283EE8B8E55BE07772CB9EF33
addons/rhs_bmp_camo.pbo.rhsafrf.0.5.6.bisign C5638F6DC62DED7C05877896096BE7CC
addons/rhs_bmp3.pbo 1F8E4520CA673FE5F67E434D6C9C3EAA
addons/rhs_bmp3.pbo.rhsafrf.0.5.6.bisign
addons/rhs_bmp3_camo.pbo CE25F0037BCD19F55D6AA1CD3AEA0B86
addons/rhs_bmp3_camo.pbo.rhsafrf.0.5.6.bisign 9CF15ED151231E6C1E8A5E63C5AAD829
addons/rhs_btr70.pbo 7FCC93BDDBE1A0573ABF146FA7C1FAD9
addons/rhs_btr70.pbo.rhsafrf.0.5.6.bisign 61FD5A3D99F6A60BB31F0D396B19E5C5
addons/rhs_btr70_camo.pbo 9A8F2BF875276FA1F7018F2D60C89D7A

```

My tool works just fine, except it disagrees on the sorting
(pastebinned at https://dpaste.org/UDiK):

```
addons/rhs_bmp.pbo 2D08606D9BCB43E37A44CDBCD753F663
addons/rhs_bmp.pbo.rhsafrf.0.5.6.bisign C5638F6DC62DED7C05877896096BE7CC
addons/rhs_bmp3.pbo 1F8E4520CA673FE5F67E434D6C9C3EAA
addons/rhs_bmp3.pbo.rhsafrf.0.5.6.bisign 2CCF421E08170964CF323A98725DDA6E
addons/rhs_bmp3_camo.pbo CE25F0037BCD19F55D6AA1CD3AEA0B86
addons/rhs_bmp3_camo.pbo.rhsafrf.0.5.6.bisign 4F0BAAFDDC2C3474F7B310BAF221C22E
addons/rhs_bmp_camo.pbo 5A9AED2283EE8B8E55BE07772CB9EF33
addons/rhs_bmp_camo.pbo.rhsafrf.0.5.6.bisign 9CF15ED151231E6C1E8A5E63C5AAD829
addons/rhs_btr70.pbo 7FCC93BDDBE1A0573ABF146FA7C1FAD9
```

In essence, to the .NET program `_` sorts before `3`, whereas for
my Go program, it is the other way around.

Now we could discuss at length which order is the correct one,
but for my purposes (replicating the .NET tool) is what I
strongly prefer. The alternative would be a breaking change in a
larger system I do not control, and as such would be a lot of
pain.

So my question is: what is the easiest way to tell Go that `_`
sorts before numerals here? My current sort helpers are (on the
playground: https://play.golang.org/p/pQLeZN-fptY):

```
type Files []ModFile
type ModFile struct {
    Path     string
    // Other fields here
}
func (f Files) Len() int           { return len(f) }
func (f Files) Swap(i, j int)      { f[i], f[j] = f[j], f[i] }
func (f Files) Less(i, j int) bool { return strings.ToLower(f[i].Path) < 
strings.ToLower(f[j].Path) }
```

(yes, the case folding is another peculiarity of the .NET tool)

Best,
Tobias

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/YP/zSVcWipS7lsB5%40skade.schwarzvogel.de.

Reply via email to