-
[golang] map, setGo lang 실습 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=10337667package 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 }
반응형