Go lang 실습
[golang] map, set
컴닥
2020. 12. 13. 14:39
반응형
고 언어는 set이 없다.
map으로 비슷하게 쓸 수는 있다.
package main
import (
"fmt"
)
func add(s map[int]bool, v int) map[int]bool {
s[v] = true
return s
}
func main() {
s := make(map[int]bool)
s = add(s, 1)
s = add(s, 2)
s = add(s, 3)
s = add(s, 2)
fmt.Println(s)
delete(s, 2)
fmt.Println(s)
}
map[1:true 2:true 3:true]
map[1:true 3:true]
bool이 쓸데없이 메모리를 차지한다. 대신 빈 구조체를 사용하자.
디스커버리 go 언어. https://book.naver.com/bookdb/book_detail.nhn?bid=10337667
package main
import (
"fmt"
)
func add(s map[int]struct{}, v int) map[int]struct{} {
s[v] = struct{}{}
return s
}
func main() {
s := make(map[int]struct{})
s = add(s, 1)
s = add(s, 2)
s = add(s, 3)
s = add(s, 2)
fmt.Println(s)
delete(s, 2)
fmt.Println(s)
}
map[1:{} 2:{} 3:{}]
map[1:{} 3:{}]
type을 이용하면 더 간단하려나?
package main
import (
"fmt"
)
type ns struct{}
func add(s map[int]ns, v int) map[int]ns {
s[v] = ns{}
return s
}
func main() {
s := make(map[int]ns)
s = add(s, 1)
s = add(s, 2)
s = add(s, 3)
s = add(s, 2)
fmt.Println(s)
delete(s, 2)
fmt.Println(s)
}
합집합
func union(a map[int]bool, b map[int]bool) map[int]bool {
c := map[int]bool{}
for each := range a {
c[each] = true
}
for each := range b {
c[each] = true
}
return c
}
반응형