반응형
슬라이스에서 요소 위치를 찾는 방법은 무엇입니까?
슬라이스에있는 요소의 위치를 어떻게 결정합니까?
다음과 같은 것이 필요합니다.
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을 반환합니다.
이를위한 라이브러리 기능이 없습니다. 직접 코딩해야합니다.
Another option is to sort the slice using the sort package, then search for the thing you are looking for:
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)
}
prints
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
This works for the basic types and you can always implement the sort interface for your own type if you need to work on a slice of other things. See http://golang.org/pkg/sort
Depends on what you are doing though.
func index(slice []string, item string) int {
for i, _ := range slice {
if slice[i] == item {
return i
}
}
return -1
}
참고URL : https://stackoverflow.com/questions/8307478/how-to-find-out-element-position-in-slice
반응형
'program story' 카테고리의 다른 글
자바 캐스팅으로 오버 헤드가 발생합니까? (0) | 2020.08.27 |
---|---|
대부분의 프린터에서 처리 할 수있는 최소 여백은 얼마입니까? (0) | 2020.08.27 |
Visual Studio 2012의 '백그라운드 작업 대기'란 무엇입니까? (0) | 2020.08.27 |
std :: hash를 전문화하는 방법 (0) | 2020.08.27 |
자바 스크립트의 다른 배열에 배열 추가 (0) | 2020.08.27 |