반응형

Golang, 배열과 슬라이스 비교, 슬라이스 항목 제거 

 

글. 수알치 오상문 

 

예제 코드는 배열과 슬라이스 비교하고,

슬라이스의 특정 값을 가진 항목 제거 및 특정 인덱스 항목을 제거하는 예제입니다.

 

package main

import "fmt"

func main() {
	array1 := [...]int32{10, 20, 30, 40, 50} // Array [5]int32{10, 20, 30, 40, 50}
	array2 := [3]int32{60, 70, 80}           // Array [...]int32{60, 70, 80
	var slice []int32 = make([]int32, 5, 10) // Slice : make(배열타입, 초기사용 크기, 전체 크기)

	fmt.Println(slice)
	fmt.Println(array1)
	fmt.Println(array2)

	slice = array1[:] // array1[] is Error! (Slice is OK!)
	fmt.Println(slice)

	slice = append(slice, array2[:]...) // array2[]... is Error! (Slice is OK!)
	fmt.Println(slice)

	// 슬라이스에서 50 값을 가진 항목을 모두 제거 (아이템 제거하는 내장 기능 없음)
	var del_val int32 = 50
	new_slice := make([]int32, 0, 0) // 임시 슬라이스
	for _, v := range slice {
		if v != del_val {
			new_slice = append(new_slice, v)
		}
	}
	slice = new_slice
	fmt.Println(slice)

	// 슬라이스에서 인덱스 5 항목 제거
	idx := 5
	if idx < 0 || idx < len(slice) {
		slice = append(slice[:idx], slice[idx+1:]...) // append(slice[:index], slice[index+1:]) is Error!
		fmt.Println(slice)
	} else {
		fmt.Println("인덱스 범위 오류!")
	}
}

  

[실행 결과]

[0 0 0 0 0]
[10 20 30 40 50]
[60 70 80]
[10 20 30 40 50]
[10 20 30 40 50 60 70 80]
[10 20 30 40 60 70 80]
[10 20 30 40 60 80]

반응형

+ Recent posts