Skip to content
Santekno.com | Level Up Your Engineering Skills
ID
📖 0%
24 Oct 2022 · 2 mnt baca ·Artikel 17 / 119
Go

Mengenal Container List Dan Sort pada Golang

IH
Ihsan Arif
Penulis di Santekno · Backend Engineer

Selain arrays dan maps, Go memiliki beberapa koleksi lagi yang tersedia di bawah paket kontainer. Kita akan melihat paket container/list sebagai contoh.

Package List

Library container/list mengimplementasikan list yang tertaut ganda. list tertaut atau sering kita bilang Linked List adalah tipe struktur data yang terlihat seperti ini:

List

Setiap node dari list berisi nilai (1, 2, atau 3 dalam kasus ini) dan penunjuk ke node (titik) berikutnya. Karena ini adalah list yang ditautkan ganda (double linked list), setiap node juga akan memiliki pointer ke node sebelumnya. list ini dapat dibuat dengan program dibawah ini.

go
 1package main
 2
 3import ("fmt" ; "container/list")
 4
 5func main() {
 6     var x list.List
 7     x.PushBack(1)
 8     x.PushBack(2)
 9     x.PushBack(3)
10     for e := x.Front(); e != nil; e=e.Next() {
11           fmt.Println(e.Value.(int))
12} }
Maka bisa kita lihat hasilnya jika kita jalankan program diatas
bash
1➜  12-libary-container-sort git:(main) ✗ go run main.go 
21
32
43
Nilai nol untuk list adalah list kosong (*list juga dapat dibuat menggunakan list.New). Nilai ditambahkan ke list menggunakan fungsi PushBack. Kita mengulang setiap item dalam list dengan mendapatkan element pertama, dan mengikuti semua tautan sampai kita mencapai nil.

Package Sort

Packag sort berisi fungsi untuk menyortir data sesuai dengan kebutuhkan kita. Ada beberapa fungsi penyortiran yang telah ditentukan sebelumnya (untuk int dan float). Berikut ini contoh cara mengurutkan data kita.

go
 1package main
 2
 3import (
 4	"fmt"
 5	"sort"
 6)
 7
 8type Orang struct {
 9	Nama string
10	Umur int
11}
12type ByNama []Orang
13
14func (this ByNama) Len() int {
15	return len(this)
16}
17func (this ByNama) Less(i, j int) bool {
18	return this[i].Nama < this[j].Nama
19}
20func (this ByNama) Swap(i, j int) {
21	this[i], this[j] = this[j], this[i]
22}
23
24func main() {
25	kids := []Orang{
26		{"Jill", 9},
27		{"Jack", 10},
28	}
29	sort.Sort(ByNama(kids))
30	fmt.Println(kids)
31}
Fungsi Sort didalam sort package mengambil sort.Interface dan mengurutkannya. Sort.Interface membutuhkan 3 metode: Len, Less dan Swap. Untuk menentukan pengurutan kita sendiri, kita membuat tipe baru (ByName) dan membuatnya setara dengan sepotong dengan sepotong dari apa yang ingin kita urutkan. Kemudian kita mendefinisikan 3 metode.

Kita juga bisa mengurutkan data kids tersebut berdasarkan usia. Maka, kita juga perlu mendefinisikan tipe ByUmur agar sorting-nya disesuaikan dengan umur dari data orang-orang. Berikut dibawah ini perlu kita tambahkan.

go
 1type ByUmur []Orang
 2
 3func (this ByUmur) Len() int {
 4	return len(this)
 5}
 6func (this ByUmur) Less(i, j int) bool {
 7	return this[i].Umur < this[j].Umur
 8}
 9func (this ByUmur) Swap(i, j int) {
10	this[i], this[j] = this[j], this[i]
11}

Artikel Terkait

💬 Komentar