Advertisement
dayment

User Profile Hash GOLANG

Feb 11th, 2025
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 2.60 KB | Source Code | 0 0
  1. package main
  2.  
  3. import (
  4.     "fmt"
  5.     "time"
  6. )
  7.  
  8. // Struktur data untuk profil user
  9. type UserProfile struct {
  10.     Username   string
  11.     FullName   string
  12.     Email      string
  13.     Phone      string
  14.     Bio        string
  15.     DateJoined string
  16. }
  17.  
  18. // Struktur untuk hash table dengan chaining
  19. type HashTable struct {
  20.     Size  int
  21.     Table [][]UserProfile // Menggunakan slice of slice untuk chaining
  22. }
  23.  
  24. // Hash function menggunakan djb2
  25. func (ht *HashTable) _hashFunction(key string) int {
  26.     hash := uint32(5381)
  27.     for i := 0; i < len(key); i++ {
  28.         hash = ((hash << 5) + hash) + uint32(key[i])
  29.     }
  30.     return int(hash % uint32(ht.Size))
  31. }
  32.  
  33. // Fungsi untuk menambahkan user ke hash table
  34. func (ht *HashTable) Insert(user UserProfile) {
  35.     index := ht._hashFunction(user.Username)
  36.     bucket := &ht.Table[index]
  37.  
  38.     // Cek apakah username sudah ada
  39.     for _, u := range *bucket {
  40.         if u.Username == user.Username {
  41.             fmt.Println("Username", user.Username, "sudah ada!")
  42.             return
  43.         }
  44.     }
  45.  
  46.     // Menambahkan user ke dalam bucket
  47.     *bucket = append(*bucket, user)
  48.     fmt.Println("User", user.Username, "berhasil ditambahkan.")
  49. }
  50.  
  51. // Fungsi untuk mencari user berdasarkan username
  52. func (ht *HashTable) Search(username string) *UserProfile {
  53.     index := ht._hashFunction(username)
  54.     bucket := ht.Table[index]
  55.  
  56.     // Mencari user dalam bucket
  57.     for _, user := range bucket {
  58.         if user.Username == username {
  59.             return &user
  60.         }
  61.     }
  62.     return nil
  63. }
  64.  
  65. // Fungsi untuk menampilkan isi hash table
  66. func (ht *HashTable) Display() {
  67.     for i, bucket := range ht.Table {
  68.         if len(bucket) > 0 {
  69.             fmt.Printf("Index %d: %v\n", i, bucket)
  70.         }
  71.     }
  72. }
  73.  
  74. // Fungsi utama untuk menjalankan program
  75. func main() {
  76.     // Inisialisasi hash table
  77.     hashTable := HashTable{Size: 100, Table: make([][]UserProfile, 100)}
  78.  
  79.     // Menambahkan beberapa user
  80.     user1 := UserProfile{"paijo", "Paijo bin Joe", "[email protected]", "08123456789", "Project Manager", time.Now().Format("2006-01-02 15:04:05")}
  81.     user2 := UserProfile{"paiman", "Paiman Jane", "[email protected]", "08129876543", "Software Engineer", time.Now().Format("2006-01-02 15:04:05")}
  82.     user3 := UserProfile{"sugiman", "Sugiman bin Smith", "[email protected]", "08121212121", "Data Scientist", time.Now().Format("2006-01-02 15:04:05")}
  83.  
  84.     hashTable.Insert(user1)
  85.     hashTable.Insert(user2)
  86.     hashTable.Insert(user3)
  87.  
  88.     // Mencari user
  89.     searchUsername := "paijo"
  90.     foundUser := hashTable.Search(searchUsername)
  91.     if foundUser != nil {
  92.         fmt.Printf("User ditemukan: %+v\n", *foundUser)
  93.     } else {
  94.         fmt.Println("User", searchUsername, "tidak ditemukan.")
  95.     }
  96.  
  97.     // Menampilkan isi hash table
  98.     hashTable.Display()
  99. }
  100.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement