🐥
Rubyに慣れている人向けのGo言語の配列(スライス)チートシート
はじめに
最近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) // 配列をコピー
Discussion