It could be that .NET is using some locale based collation. Seems like a lot of machinery, but might do the trick https://pkg.go.dev/golang.org/x/text@v0.3.6/collate
On Wed, 28 Jul 2021 at 06:52, jake...@gmail.com <jake6...@gmail.com> wrote: > Personally I would be careful about assuming that was the only sorting > difference. Unless you have checked every Unicode character, there could be > other hidden 'special cases'. If it *really *mattered, personally, I > would dig into the .NET library source code and see what algorithm or > system call is used to sort. You may even be able to use the same system > call (assuming you are on Windows only) or algorithm. > > On Tuesday, July 27, 2021 at 1:57:07 PM UTC-4 amplep...@gmail.com wrote: > >> 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/98eed7b6-4b1e-4ba5-a457-141ae5daca52n%40googlegroups.com > <https://groups.google.com/d/msgid/golang-nuts/98eed7b6-4b1e-4ba5-a457-141ae5daca52n%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- 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/CAFuMYUx%2BuTKqnwZhtsSa6_36VqE_OGd4HNfi-ZvRZkWBBoJZDA%40mail.gmail.com.