[position] 슬라이스에서 요소 위치를 찾는 방법은 무엇입니까?

슬라이스에있는 요소의 위치를 ​​어떻게 결정합니까?

다음과 같은 것이 필요합니다.

type intSlice []int

func (slice intSlice) pos(value int) int {
    for p, v := range slice {
        if (v == value) {
            return p
        }
    }
    return -1
}



답변

죄송합니다.이를 수행 할 수있는 일반 라이브러리 함수가 없습니다. Go에는 모든 슬라이스에서 작동 할 수있는 함수를 작성하는 직접적인 방법이 없습니다.

함수는 작동하지만 range.

바이트 슬라이스가 있으면 bytes.IndexByte가 있습니다.


답변

관용적으로 일반적인 함수를 만들 수 있습니다.

func SliceIndex(limit int, predicate func(i int) bool) int {
    for i := 0; i < limit; i++ {
        if predicate(i) {
            return i
        }
    }
    return -1
}

그리고 사용법 :

xs := []int{2, 4, 6, 8}
ys := []string{"C", "B", "K", "A"}
fmt.Println(
    SliceIndex(len(xs), func(i int) bool { return xs[i] == 5 }),
    SliceIndex(len(xs), func(i int) bool { return xs[i] == 6 }),
    SliceIndex(len(ys), func(i int) bool { return ys[i] == "Z" }),
    SliceIndex(len(ys), func(i int) bool { return ys[i] == "A" }))


답변

함수를 작성할 수 있습니다.

func indexOf(element string, data []string) (int) {
   for k, v := range data {
       if element == v {
           return k
       }
   }
   return -1    //not found.
}

요소와 일치하면 문자 / 문자열의 인덱스를 반환합니다. 찾을 수없는 경우 -1을 반환합니다.


답변

이를위한 라이브러리 기능이 없습니다. 직접 코딩해야합니다.


답변

func index(slice []string, item string) int {
    for i, _ := range slice {
        if slice[i] == item {
            return i
        }
    }
    return -1
}


답변

또 다른 옵션은 정렬 패키지를 사용하여 슬라이스를 정렬 한 다음 찾고있는 것을 검색하는 것입니다.

package main

import (
    "sort"
    "log"
    )

var ints = [...]int{74, 59, 238, -784, 9845, 959, 905, 0, 0, 42, 7586, -5467984, 7586}

func main() {
        data := ints
        a := sort.IntSlice(data[0:])
        sort.Sort(a)
        pos := sort.SearchInts(a, -784)
        log.Println("Sorted: ", a)
        log.Println("Found at index ", pos)
}

인쇄물

2009/11/10 23:00:00 Sorted:  [-5467984 -784 0 0 42 59 74 238 905 959 7586 7586 9845]
2009/11/10 23:00:00 Found at index  1

이것은 기본 유형에 대해 작동하며 다른 부분에 대해 작업해야하는 경우 항상 고유 유형에 대한 정렬 인터페이스를 구현할 수 있습니다. 참조 http://golang.org/pkg/sort를

그래도 무엇을하고 있는지에 따라 다릅니다.


답변