I forgot you wanted generics: https://go.dev/play/p/PhGVjsWWTdB
On Friday, 14 July 2023 at 09:47:21 UTC+1 Brian Candler wrote: > You seem to be saying "if the S field is different then I want to consider > these two structs different, and get pointers to the two structs. If the S > field is the same then I want to skip the pair entirely". Is that right? > > The required semantics are not entirely clear, but it sounds like a > handful of lines of code to implement - there's no point importing and > learning a third party library. > > On the assumption that all the elements to be compared are in > corresponding positions in a and b: > https://go.dev/play/p/Y71sLUpftzR > > On Friday, 14 July 2023 at 09:11:35 UTC+1 Mark wrote: > >> In fact the diff pkg mentioned above does work but is of no use to me >> since for each change it gives back only the field(s) used, not the >> original structs (or pointers to them), so I can't see any way back to the >> original structs (or their slice indexes). >> >> On Friday, July 14, 2023 at 8:58:41 AM UTC+1 Mark wrote: >> >>> What I really want to do is to be able to diff slices of structs on the >>> basis of one single field. >>> For example, given: >>> ``` >>> type Item struct { >>> I int >>> S string >>> } >>> ``` >>> and given `a` and `b` are both of type`[]Item`, I want to diff these >>> slices based purely on the `S` field, ignoring the `I` field. >>> >>> This diff pkg <https://pkg.go.dev/github.com/r3labs/diff/v3> claims to >>> be able to do this (something I'm testing, so I don't know either way yet), >>> but in any case, it is incredibly slow. >>> >>> On Friday, July 14, 2023 at 8:31:39 AM UTC+1 Peter Galbavy wrote: >>> >>>> As a slight digression - I thought I was going mad, but 'slices' and >>>> 'maps' are new :-) Only in 1.21 though... >>>> >>>> Well, there is a lot of boiler plate that maps.Keys() will get rid of. >>>> >>>> On Thursday, 13 July 2023 at 10:06:01 UTC+1 Brian Candler wrote: >>>> >>>>> Structs are already comparable, but all fields must be the same: >>>>> https://go.dev/play/p/XwhSz4DEDwL >>>>> >>>>> I think your solution with function 'eq' is fine. You can see the >>>>> same thing in the standard library in slices.CompactFunc and >>>>> slices.EqualFunc >>>>> https://pkg.go.dev/slices#CompactFunc >>>>> https://pkg.go.dev/slices#EqualFunc >>>>> >>>>> For the case of "ordered" rather than "comparable", have a look at >>>>> slices.BinarySearchFunc and related functions. >>>>> >>>>> On Thursday, 13 July 2023 at 09:29:38 UTC+1 Mark wrote: >>>>> >>>>>> I have a package which has a function `Do[T comparable](a, b []T) >>>>>> Result`. >>>>>> I have a struct: >>>>>> ```go >>>>>> type N struct { >>>>>> x int >>>>>> y int >>>>>> t string >>>>>> } >>>>>> ``` >>>>>> Is it possible to make `N` comparable; in particular by a field of my >>>>>> choice, e.g., `t`? >>>>>> >>>>>> Or will I have to make, say, `DoFunc(a, b []N, eq func(i, j N) bool) >>>>>> Result` with, say, >>>>>> `func eq(i, j N) { return i.t == j.t }`? >>>>>> >>>>> -- 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/e15b25de-afc5-47fe-9fb1-37ae6c8446ccn%40googlegroups.com.