반응형
Go 1.21, slice 기능 지원
출처: https://qiita.com/yuya_sega/items/13542f0e30945760c359
파이썬의 슬라이싱 문법을 기대했는데, 그런 건 아니군요.
새로운 기능이라니 참고하세요.
Contains
s 슬라이스에 값 v가 있는지 확인하고, 존재하면 true를 반환한다.
func Contains[S ~[]E, E comparable](s S, v E) bool |
샘플
m := []string{"taro", "jiro", "saburo"} ok := slices.Contains(m, "jiro") fmt.Println(fmt.Sprintf("%t", ok)) // true |
이전에는 이렇게 했다
func contains(slice []string, key string) bool { m := make(map[string]struct{}, len(slice)) for _, s := range slice { m[s] = struct{}{} } _, ok := m[key] return ok } |
Insert / Delete
Insert: s 슬라이스 내의 i 위치에 v를 추가하고 반환한다
Delete: s 슬라이스 내에 있는 요소를 i 에서 j 위치까지 삭제하고 반환한다
func Insert[S ~[]E, E any](s S, i int, v ...E) S func Delete[S ~[]E, E any](s S, i, j int) S |
샘플
m := []string{"taro", "jiro", "saburo"} m = slices.Insert(m, len(m), "siro") fmt.Println(fmt.Sprintf("%v", m)) // [taro jiro saburo siro] m = slices.Delete(m, len(m)-1, len(m)) fmt.Println(fmt.Sprintf("%v", m)) // [taro jiro saburo] |
이전에는 이렇게 했다
m := []string{"taro", "jiro", "saburo"} m = append(m, "siro") fmt.Println(fmt.Sprintf("%v", m)) // [taro jiro saburo siro] m = append(m[:len(m)-1], m[len(m):]...) fmt.Println(fmt.Sprintf("%v", m)) // [taro jiro saburo] |
Index
func Index[S ~[]E, E comparable](s S, v E) int |
s 슬라이스에 v가 있는 위치를 반환한다. 존재하지 않으면 -1이 반환된다.
샘플
m := []string{"taro", "jiro", "saburo"} searchKeys := []string{"jiro", "siro"} for _, skey := range searchKeys { if idx := slices.Index(m, skey); idx != -1 { fmt.Println(fmt.Sprintf("%s is found.", m[idx])) continue } fmt.Println(fmt.Sprintf("%s is not found.", skey)) } // jiro is found. // siro is not found. |
샘플 케이스
슬라이스의 특정 문자를 삭제
import ( "fmt" "slices" ) // jiro 를 삭제하고 싶다 func main() { m := []string{"taro", "jiro", "saburo"} if idx := slices.Index(m, "jiro"); idx != -1 { m = slices.Delete(m, idx, idx+1) } fmt.Println(fmt.Sprintf("%v", m)) // [taro saburo] } |
슬라이스에 지정된 문자가 없으면 삽입
import ( "fmt" "slices" ) func main() { m := []string{"taro", "jiro", "saburo"} if exists := slices.Contains(m, "siro"); !exists { m = slices.Insert(m, len(m), "siro") } fmt.Println(fmt.Sprintf("%v", m)) // [taro jiro saburo siro] } |
반응형
'Go (Golang)' 카테고리의 다른 글
Go (Golang) 프로그래밍 연습 웹 사이트 (0) | 2023.11.14 |
---|---|
Go 언어 특징을 빠르게 살펴보자. (0) | 2023.11.12 |
Golang Korea 개발자 그룹 링크 (0) | 2023.11.12 |
Golang 프로그래밍 예제 1 (0) | 2023.10.31 |
CentOS에 Go 설치하기 (0) | 2023.10.30 |