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
}

 

반응형