Back to "Σκελετός μορφής Guid από μια επέκταση εισαγωγής συμβολοσειρών."

This is a viewer only at the moment see the article on how this works.

To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk

This is a preview from the server running through my markdig pipeline

C#

Σκελετός μορφής Guid από μια επέκταση εισαγωγής συμβολοσειρών.

Wednesday, 07 August 2024

Μικρές θέσεις FTW

Μικρή αλλά ενδεχομένως χρήσιμη λύση σε ένα πρόβλημα που είχα. Δηλαδή, πώς να δημιουργήσετε ένα GUID από μια συμβολοσειρά εισόδου όπου η Guid είναι πάντα έγκυρη αλλά μοναδική για κάθε δεδομένη συμβολοσειρά εισόδου.

Το χρειαζόμουν αυτό για μένα. γεννήτρια τροφοδοσίας RSS όπου ήθελα να δημιουργήσω ένα GUID για κάθε αντικείμενο στην τροφή που ήταν επαναλαμβανόμενο αλλά μοναδικό για κάθε αντικείμενο.

Από ό,τι φαίνεται... XxHash128 είναι κάπως τέλειο για αυτό, καθώς δίνει πάντα 128 bit (ή 16 Byte) hash. Αυτό σημαίνει ότι μπορεί να χρησιμοποιηθεί για τη δημιουργία ενός GUID από μια συμβολοσειρά εισόδου χωρίς 'Array'.Copy ανοησίες.

     public  static string ToGuid(this string  name)
    {
        var buf = Encoding.UTF8.GetBytes(name);
        var guid = XxHash128.Hash(buf);
        var guidS =  string.Format("{0:X2}{1:X2}{2:X2}{3:X2}-{4:X2}{5:X2}-{6:X2}{7:X2}-{8:X2}{9:X2}-{10:X2}{11:X2}{12:X2}{13:X2}{14:X2}{15:X2}", 
            guid[0], guid[1], guid[2], guid[3], guid[4], guid[5], guid[6], guid[7], guid[8], guid[9], guid[10], guid[11], guid[12], guid[13], guid[14], guid[15]);
        return guidS.ToLowerInvariant();
    }

Αυτή είναι μια απλή μέθοδος επέκτασης που παίρνει μια συμβολοσειρά εισόδου και επιστρέφει ένα GUID. Η XxHash128 είναι από το System.IO.Hashing Διάστημα ονομάτων.

Μπορείτε φυσικά να χρησιμοποιήσετε κάθε αλγόριθμο hashing που δίνει ένα 128 κομμάτι χασίς. Η XxHash128 είναι απλά μια καλή επιλογή καθώς είναι γρήγορη και δίνει μια καλή κατανομή των αξιών χασίς.

Θα μπορούσατε επίσης να επιστρέψετε ένα new Guid(<string>) από αυτό για να πάρετε μια πραγματική Guid που μπορεί να χρησιμοποιηθεί σε μια βάση δεδομένων ή άλλες ειδικές περιπτώσεις χρήσης GUID.

logo

©2024 Scott Galloway