aboutsummaryrefslogtreecommitdiff
path: root/content/generics/index.go
diff options
context:
space:
mode:
Diffstat (limited to 'content/generics/index.go')
-rw-r--r--content/generics/index.go28
1 files changed, 28 insertions, 0 deletions
diff --git a/content/generics/index.go b/content/generics/index.go
new file mode 100644
index 0000000..2efb3d8
--- /dev/null
+++ b/content/generics/index.go
@@ -0,0 +1,28 @@
+//go:build OMIT
+
+package main
+
+import "fmt"
+
+// Index mengembalikan indeks pada slice s yang bernilai x, atau -1 bila x
+// tidak ditemukan.
+func Index[T comparable](s []T, x T) int {
+ for i, v := range s {
+ // v dan x bertipe T, yang memiliki syarat "comparable",
+ // sehingga dapat menggunakan operator "==".
+ if v == x {
+ return i
+ }
+ }
+ return -1
+}
+
+func main() {
+ // Index dapat digunakan untuk slice bertipe int.
+ si := []int{10, 20, 15, -10}
+ fmt.Println(Index(si, 15))
+
+ // Index juga dapat digunakan untuk slice bertipe string.
+ ss := []string{"foo", "bar", "baz"}
+ fmt.Println(Index(ss, "hello"))
+}