position - tutorial - manual de navisworks 2018 en español pdf
¿Cómo averiguar la posición del elemento en el sector? (6)
Lo sentimos, no hay una función de biblioteca genérica para hacer esto. Go no tiene una forma directa de escribir una función que pueda funcionar en cualquier sector.
Tu función funciona, aunque sería un poco mejor si la escribieras usando el range
.
Si tiene un segmento de bytes, hay bytes.IndexByte .
¿Cómo se determina la posición de un elemento presente en el sector?
Necesito algo como lo siguiente:
type intSlice []int
func (slice intSlice) pos(value int) int {
for p, v := range slice {
if (v == value) {
return p
}
}
return -1
}
No hay una función de biblioteca para eso. Tienes que codificar por tu cuenta.
Otra opción es ordenar el sector usando el paquete de clasificación, y luego buscar lo que está buscando:
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)
}
huellas dactilares
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
Esto funciona para los tipos básicos y siempre puede implementar la interfaz de clasificación para su propio tipo si necesita trabajar en una porción de otras cosas. Ver http://golang.org/pkg/sort
Depende de lo que estés haciendo sin embargo.
Podrías escribir una función;
func indexOf(element string, data []string) (int) {
for k, v := range data {
if element == v {
return k
}
}
return -1 //not found.
}
Esto devuelve el índice de un carácter / cadena si coincide con el elemento. Si no se encuentra, devuelve un -1.
Puede crear una función genérica de manera idiomática:
func SliceIndex(limit int, predicate func(i int) bool) int {
for i := 0; i < limit; i++ {
if predicate(i) {
return i
}
}
return -1
}
Y el uso:
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 index(slice []string, item string) int {
for i, _ := range slice {
if slice[i] == item {
return i
}
}
return -1
}