robert-min / project-go

Go 언어 리뷰와 기존에 파이썬으로 진행했던 프로젝트를 Go 언어로 개선한 repo
0 stars 0 forks source link

슬라이스 특정 값 삭제, 변경, 정렬 #7

Open robert-min opened 11 months ago

robert-min commented 11 months ago

슬라이스 요소 삭제

package main

import "fmt"

func main() {
    slice := []int{1, 2, 3, 4, 5}
    idx := 2 // 삭제할 인덱스

    // 삭제할 인덱스 값을 찾아 가장 마지막으로
    for i := idx + 1; i < len(slice); i++ {
        slice[i-1] = slice[i]
    }
    // 가장 마지막 값 삭제
    slice = slice[:len(slice)-1]
    fmt.Println(slice)
}

append 함수로 개선

package main

import "fmt"

func main() {
    slice := []int{1, 2, 3, 4, 5}
    idx := 2 // 삭제할 인덱스

    // slice[:idx] : 삭제하려는 값 전까지
    // slice[idx+1:]... : 삭제하려는 값 다음 값을 요소로 해서 슬라이스에 붙임
    slice = append(slice[:idx], slice[idx+1:]...)
    fmt.Println(slice)
}
robert-min commented 11 months ago

슬라이스 요소 추가

package main

import "fmt"

func main() {
    slice := []int{1, 2, 3, 4, 5}

    slice = append(slice, 0)

    idx := 2 // 추가하려는 위치

    for i := len(slice) - 2; i >= idx; i-- {
        slice[i+1] = slice[i]
    }

    slice[idx] = 100
    fmt.Println(slice)
}

append 함수로 코드 개선

package main

import (
    "fmt"
)

func main() {
    slice := []int{1, 2, 3, 4, 5}

    idx := 2 // 추가하려는 위치

    slice = append(slice[:idx], append([]int{100}, slice[idx:]...)...)
    fmt.Println(slice)
}

불필요한 메모리 없도록 코드 개선

package main

import "fmt"

func main() {
    slice := []int{1, 2, 3, 4, 5}

    idx := 2 // 추가하려는 위치

    slice = append(slice, 0)
    copy(slice[idx+1:], slice[idx:])
    slice[idx] = 100

    fmt.Println(slice)
}
robert-min commented 11 months ago

슬라이스 정렬

int 슬라이스 정렬

package main

import (
    "fmt"
    "sort"
)

func main() {
    slice := []int{8, 2, 6, 4, 5}
    sort.Ints(slice)
    fmt.Println(slice)
}

구조체 슬라이스 정렬

package main

import (
    "fmt"
    "sort"
)

type Student struct {
    Name string
    Age  int
}

type Students []Student

func (s Students) Len() int {
    return len(s)
}

func (s Students) Less(i, j int) bool {
    return s[i].Age < s[j].Age
}

func (s Students) Swap(i, j int) {
    s[i], s[j] = s[j], s[i]
}

func main() {
    s := []Student{
        {"김", 1}, {"박", 11}, {"한", 5},
    }

    sort.Sort(Students(s))
    fmt.Println(s)
}