Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

proposal: add func uuid.Compare(a, b UUID) int #152

Open
it512 opened this issue Jan 11, 2024 · 4 comments
Open

proposal: add func uuid.Compare(a, b UUID) int #152

it512 opened this issue Jan 11, 2024 · 4 comments

Comments

@it512
Copy link
Contributor

it512 commented Jan 11, 2024

uuid is an ordered type, but Array is not supported operation < >
recommended to provide a function to support comparison operations

maybe

func Compare(a, b UUID) int {
    return bytes.Compare(a[:], b[:])
}
@ayang64
Copy link
Contributor

ayang64 commented Jun 29, 2024

If it doesn't exsit, adding Compare() or maybe Equal() as a method to the UUID type might be interesting too like:

if myuuid.Equal(theiruuid) {
  // do stuff
}

@pborman
Copy link
Collaborator

pborman commented Jun 29, 2024

@ayang64 For equality it just is myuuid == theiruuid. Making UUIDs be comparable for equality is actually the reason that github.com/google/uuid was forked from github.com/pborman/uuid. The latter has now been rewritten to be a wrapper around the former. The former represents a UUID as an array while that latter (original) used a slice.

A Compare function (as in strings and bytes) would aid in ordering UUIDs.

@it512 Is there motivation for Compare beyond that it exists in strings and bytes?

@ayang64
Copy link
Contributor

ayang64 commented Jun 29, 2024

@pborman - d'oh! thank you. i didn't consider that while i was typing.

@it512
Copy link
Contributor Author

it512 commented Jun 30, 2024

sort and search
for exp.

package main

import (
	"bytes"
	"log"
	"slices"

	"github.com/google/uuid"
)

func Compare(a, b uuid.UUID) int {
	return bytes.Compare(a[:], b[:])
}

var uuids = []uuid.UUID{uuid.Max, uuid.Nil, uuid.New(), uuid.New()}

func main() {
	slices.SortFunc(uuids, Compare)
	log.Println(uuids)

	i, _ := slices.BinarySearchFunc(uuids, uuid.Max, Compare)
	log.Println(i)
	log.Println(uuids[i])
}

output

2024/06/30 22:36:00 [00000000-0000-0000-0000-000000000000 c0ad65fa-53a0-44e6-b605-95b4b83d2481 f9b73b88-da50-480b-acad-f41c820b57c7 ffffffff-ffff-ffff-ffff-ffffffffffff]
2024/06/30 22:36:00 3
2024/06/30 22:36:00 ffffffff-ffff-ffff-ffff-ffffffffffff

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants