728x90

배열이나 슬라이스는 인덱스 번호로 접근하게 된다. 이 때 인덱스 번호는 무조건 숫자여야 한다.

그러면 다른 의문이 생길 수 있다. 인덱스 번호가 다른 거면 안될까?

그런 의문에서 다른 언어에서 수많은 인덱스 번호가 숫자가 아닌 자료형이 등장했다.

자바의 HashMap, C++ 의 unordered_map, python의 dictionary, js의 object, php의 associate array등..

Go에서도 이런게 있다. 바로 맵이다.

이번에는 맵을 사용하는 예시를 보도록 하자.


package main

import "fmt"

func main() {
mymap1 := map[string]string{}
mymap2 := make(map[string]string)

mymap1["aoa"] = "choa"
mymap1["girlsday"] = "mina"
mymap1["twice"] = "dahyun"

mymap2["aoa"] = "jimin"
mymap2["girlsday"] = "ura"
mymap2["twice"] = "momo"

for index, value := range mymap1 {
fmt.Print(index, " ", value, "\n")
}
fmt.Println()
for index, value := range mymap2 {
fmt.Print(index, " ", value, "\n")
}
}

위의 소스는 맵을 사용하는 예시이다. 쪼개서 보도록 하자.


mymap1 := map[string]string{}
mymap2 := make(map[string]string)

만드는 방법은 두가지이다.


<변수명> := map[<key타입>]<value타입>{}

<변수명> := make(map[<key타입>]<value타입>)


key타입이 문자열만 되는건 아니지만 주로 문자열을 사용하게된다.


mymap1["aoa"] = "choa"
mymap1["girlsday"] = "mina"
mymap1["twice"] = "dahyun"

맵 자료구조에서 값을 추가하는 방법은 그냥 넣으면 된다...

값을 수정하는 방법? 그냥 넣으면 된다...

그리고 map자료구조는 순회를 할 방법이 range 밖에 없다.

그래서 무조건 아래처럼 순회해야한다.


for index, value := range mymap1 {
fmt.Print(index, " ", value, "\n")
}

이제는 index와 value가 나올 것이다.

여기서 index는 문자열로 나오게 될 것이다.



제대로 출력되는걸 확인할 수 있다.


package main

import "fmt"

func main() {
mymap1 := map[string]string{
"aoa": "choa",
"girlsday": "mina",
"twice": "dahyun",
}

mymap1["redvelvet"] = "irene"

for index, value := range mymap1 {
fmt.Print(index, " ", value, "\n")
}
fmt.Println()
}

만약 처음에 초기화를 시키고 싶다면 위처럼 하면된다.


mymap1 := map[string]string{
"aoa": "choa",
"girlsday": "mina",
"twice": "dahyun",
}

이렇게 사용하면된다. 

좀더 직관적이고 json처럼 사용하 수 있다.



난 map의 값을 지우고 싶어. => delete


package main

import "fmt"

func main() {
mymap := map[string]string{
"aoa": "choa",
"girlsday": "mina",
"twice": "dahyun",
"redvelvet": "irene",
}

delete(mymap, "twice")

for index, value := range mymap {
fmt.Print(index, " ", value, "\n")
}
fmt.Println()
}

map에서 특정 값을 지우고 싶다면 delete을 사용해야한다.

이는 메소드로서 map뿐만아니라 array도 사용할 수 있다.


위의 예시를 보면 twice를 삭제했다.(가슴아프다)

그러면 어떻게 될까?

결과를 보도록 하자.


보다시피 값이 지워지는걸 확인할 수 있다.

'Programming > Go' 카테고리의 다른 글

[Go-11]struct와 객체  (0) 2018.09.02
[Go-10]함수(function)  (0) 2018.09.01
[Go-08]배열(Array)과 슬라이스(slice)  (0) 2018.08.31
[Go-07]반복문  (0) 2018.08.31
[Go-06]switch(스위치)  (0) 2018.08.31

+ Recent posts