Go言語のmapの基本を扱いましたが、ここでは、もう少しmapの操作について触れていこうと思います。
すでに少し触れたことも含みますが、mapの要素の追加、rangeを使った反復処理、要素の削除について見ていきましょう。
mapの要素の追加
すでに少し扱った部分でもありますが、mapのデータに要素を追加してみます。
要素の追加にはキーを使って値を割り当てます。
package main
import "fmt"
func main() {
m := map[string]int{
"新垣結衣": 31,
"吉岡里帆": 27,
}
fmt.Println(m)
fmt.Println(m["新垣結衣"])
fmt.Println(m["田中みな実"])
v, ok := m["田中みな実"]
fmt.Println(v)
fmt.Println(ok)
m["田中みな実"] = 33
if v, ok := m["田中みな実"]; ok {
fmt.Println(v)
}
}
mapでデータを作成して、キーを指定して要素を出力しています。
要素の無いキーを指定して出力の確認をしたあと、値を指定して要素を追加して出力を確認しています。
実行するとこうなります。
map[吉岡里帆:27 新垣結衣:31]
31
0
0
false
33
要素に無いキーを指定しても、値は「0」としか出力されず、真偽値としてもfalseが出力されています。
キーに値を指定して要素を追加すると、値が出力されているのがわかります。
if文で要素と値の真偽を取り出して、tureの場合に処理をするという構文が、ちょっと最初は見慣れない書き方では無いかと思います。ここでは、okが成立している場合に波括弧{}ブロックを実行するという形です。
余談ですが、ここでのキーは「田中みな実」ではなく「本田翼」を使おうと思ったのですが、年齢が「27」で「吉岡里帆」と重なるので変更しました。なお、ここでの人選に特に意味はありません。ただ、みんな好きだなw
rangeを使ってのループ処理
rangeを使ってmapデータの要素をループ処理で一つずつ出力してみようと思います。
次のコードのように、for文を使ってmapデータをrangeで取り出しています。上のコードを修正して利用しています。
package main
import "fmt"
func main() {
m := map[string]int{
"新垣結衣": 31,
"吉岡里帆": 27,
}
m["田中みな実"] = 33
for k, v := range m {
fmt.Println(k, v)
}
}
要素をキーを指定して追加してから、for文でキーと要素を取り出しています。
この時、rangeでmapのmを指定して取り出して出力しています。
実行するとこうなります。
田中みな実 33
新垣結衣 31
吉岡里帆 27
全てのキーと要素が順に出力されているのがわかります。
なお、データの順番は保証されてはいません。
要素のdelete
今度は、mapデータから要素を削除する方法を見ていきましょう。
削除にはdeleteを使います。キーを指定して要素を追加したように、キーを指定して要素を削除することができます。
次の形で削除します。
delete([mapの変数], key)
実際のコードで要素を削除してみましょう。
package main
import "fmt"
func main() {
m := map[string]int{"新垣結衣": 31, "吉岡里帆": 27}
fmt.Println(m)
delete(m, "新垣結衣")
fmt.Println(m)
if v, ok := m["吉岡里帆"]; ok {
fmt.Println("age:", v)
delete(m, "吉岡里帆")
}
fmt.Println(m)
}
キーを指定してdeleteで要素を削除したあと、mapを出力しています。
if文の処理の中でも要素を削除しています。
実行すると次のように出力されます。
map[吉岡里帆:27 新垣結衣:31]
map[吉岡里帆:27]
age: 27
map[]
順に要素が削除されているのがわかります。
全ての要素が削除されるとmap[]と出力されることになります。
Pythonでコードを書くと…
同じような操作を、Pythonの辞書型のデータで行ってみます。
次のようなコードで同じような処理ができます。
def main():
m = {"新垣結衣": 31, "吉岡里帆": 27}
print(m)
m["田中みな実"] = 33
print(m)
print(m.pop("新垣結衣"))
print(m)
m.clear()
print(m)
if __name__ == "__main__":
main()
辞書型データに、新たにキーを指定して要素を追加する処理をしています。
その後、pop()を使ってキーを指定して、要素を削除しています。
最後はclear()を使って全てのデータを削除しています。
実行するとこうなります。
{'新垣結衣': 31, '吉岡里帆': 27}
{'新垣結衣': 31, '吉岡里帆': 27, '田中みな実': 33}
31
{'吉岡里帆': 27, '田中みな実': 33}
{}
要素が追加されているのがわかります。
popで削除すると、削除された値がいったん出力されます。
clear()で空の辞書データになっているのがわかります。
最後に
ここでは、Go言語のmapの操作を行いました。
キーを指定して要素を追加することができます。
mapをrangeで使うことで、キーと値を反復処理で取り出すことができます。
deleteを使って、キーを指定して要素を削除することができます。