ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [golang] map, set
    Go 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=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
    }

     

    반응형
Designed by Tistory.