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.

Reply via email to