Comment trouver la position de l’élément dans la tranche?

Comment détermine-t-on la position d’un élément présent dans la tranche?

J’ai besoin de quelque chose comme ceci:

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

    Désolé, il n’y a pas de fonction générique pour le faire. Go ne dispose pas d’une manière simple d’écrire une fonction pouvant fonctionner sur n’importe quelle tranche.

    Votre fonction marche bien que ce soit un peu mieux si vous l’écrivez en utilisant la range .

    S’il vous arrive d’avoir une tranche d’octets, il existe des octets . IndexByte .

    Vous pouvez créer une fonction générique de manière idiomatique:

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

    Et usage:

     xs := []int{2, 4, 6, 8} ys := []ssortingng{"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" })) 

    Il n’y a pas de fonction de bibliothèque pour cela. Vous devez coder par vos propres moyens.

    Vous pourriez écrire une fonction;

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

    Cela retourne l’index d’un caractère / chaîne s’il correspond à l’élément. Si ce n’est pas trouvé, renvoie un -1.

    Une autre option consiste à sortinger la tranche en utilisant le package de sorting, puis à rechercher la chose que vous recherchez:

     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) } 

    estampes

     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 

    Cela fonctionne pour les types de base et vous pouvez toujours implémenter l’interface de sorting pour votre propre type si vous avez besoin de travailler sur une tranche d’autres choses. Voir http://golang.org/pkg/sort

    Cela dépend de ce que vous faites si.

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