🐥

Rubyに慣れている人向けのGo言語の配列(スライス)チートシート

2023/04/05に公開

はじめに

最近GoでleetcodeやAtCoderを解くようになり、毎回配列操作に苦労しているのでまとめを作成しました。

けっこうRuby→Goの順番で学ぶ人も多いのではないかなと思ったので、誰かの役になれば幸いです!

配列の作成と初期化

Ruby

arr = [1, 2, 3, 4, 5] # 配列の作成と初期化
arr = Array.new(5, 0) # 配列の作成と初期化(要素を0で初期化)

Go

arr := [5]int{1, 2, 3, 4, 5} // 配列の作成と初期化
arr := [5]int{} // 配列の作成(要素を0で初期化)

要素の追加

Ruby

arr = [1, 2, 3]
arr.push(4) # 配列の末尾に要素を追加
arr.unshift(0) # 配列の先頭に要素を追加
arr.insert(2, 2.5) # 指定したインデックスに要素を追加

Go

arr := []int{1, 2, 3}
arr = append(arr, 4) // 配列の末尾に要素を追加
arr = append([]int{0}, arr...) // 配列の先頭に要素を追加
arr = append(arr[:2], append([]int{2, 2}, arr[2:]...)...) // 指定したインデックスに要素を追加

補足

append関数を使用して、指定したインデックスに要素を追加しています。append関数は、第一引数に追加するスライス、第二引数以降に追加する要素を指定します。ここでは、スライスの先頭から追加する要素までのスライスと、追加する要素、追加する要素以降のスライスを結合しています。

要素の削除

Ruby

arr = [1, 2, 3, 4, 5]
arr.pop # 配列の末尾から要素を削除
arr.shift # 配列の先頭から要素を削除
arr.delete_at(2) # 指定したインデックスの要素を削除
arr.delete(3) # 指定した値の要素を削除

Go

arr := []int{1, 2, 3, 4, 5}
arr = arr[:len(arr)-1] // 配列の末尾から要素を削除
arr = arr[1:] // 配列の先頭から要素を削除
arr = append(arr[:2], arr[3:]...) // 指定したインデックスの要素を削除
for i := 0; i < len(arr); i++ {
    if arr[i] == 3 {
        arr = append(arr[:i], arr[i+1:]...) // 指定した値の要素を削除
    }
}

指定した要素をGoで削除するには毎回forで実装しなきゃいけないのが大変...

要素の検索

Ruby

arr = [1, 2, 3, 4, 5]
arr.include?(3) # 指定した値の要素が存在するか判定
arr.index(3) # 指定した値の要素のインデックスを取得

Go

arr := []int{1, 2, 3, 4, 5}
for i, v := range arr {
    if v == 3 { // 指定した値の要素が存在するか判定
        fmt.Println(i) // 指定した値の要素のインデックスを取得
    }
}

要素の変更

Ruby

arr = [1, 2, 3, 4, 5]
arr[2] = 2.5 # 指定したインデックスの要素を変更

Go

arr := []int{1, 2, 3, 4, 5}
arr[2] = 2 // 指定したインデックスの要素を変更

配列のコピー

Ruby

arr1 = [1, 2, 3]
arr2 = arr1.dup # 配列をコピー

Go

arr1 := []int{1, 2, 3}
arr2 := make([]int, len(arr1))
copy(arr2, arr1) // 配列をコピー
GitHubで編集を提案

Discussion