Wenn Sie suchen func findByA(a []A, item A) (*A, error)
:
func findByA(a []A, item A) (*A, error) {
for i := 0; i < len(a); i++ {
if a[i].id == item.id && a[i].value == item.value {
return &a[i], nil
}
}
return nil, errors.New("no such item")
}
Versuchen Sie, diese Arbeitsbeispielcode:
package main
import "fmt"
import "errors"
type A struct {
id int
value int
}
func findById(a []A, id int) (*A, error) {
for i := 0; i < len(a); i++ {
if a[i].id == id {
return &a[i], nil
}
}
return nil, errors.New("no such item")
}
func findByValue(a []A, value int) (*A, error) {
for i := 0; i < len(a); i++ {
if a[i].value == value {
return &a[i], nil
}
}
return nil, errors.New("no such item")
}
func findByIdValue(a []A, id, value int) (*A, error) {
for i := 0; i < len(a); i++ {
if a[i].id == id && a[i].value == value {
return &a[i], nil
}
}
return nil, errors.New("no such item")
}
func findByA(a []A, item A) (*A, error) {
for i := 0; i < len(a); i++ {
if a[i].id == item.id && a[i].value == item.value {
return &a[i], nil
}
}
return nil, errors.New("no such item")
}
func main() {
t := []A{A{1, 2}, A{3, 4}, A{5, 6}}
a, err := findById(t, 3)
if err == nil {
fmt.Println(*a) // {3 4}
}
a, err = findByValue(t, 4)
if err == nil {
fmt.Println(*a) // {3 4}
}
a, err = findByIdValue(t, 3, 4)
if err == nil {
fmt.Println(*a) // {3 4}
}
a, err = findByA(t, A{3, 4})
if err == nil {
fmt.Println(*a) // {3 4}
}
}
Wenn Sie den Index der Artikel benötigen, können Sie Empfänger-Methode verwenden können , wie dieser funktionierende Beispielcode:
package main
import "fmt"
type A struct {
id int
value int
}
type SA []A
//it returns the index of the first instance of item in slice, or -1 if item is not present in slice.
func (t SA) find(a A) int {
for i := 0; i < len(t); i++ {
if t[i].id == a.id && t[i].value == a.value {
return i
}
}
return -1
}
func main() {
t := SA{A{1, 2}, A{3, 4}, A{5, 6}}
i := t.find(A{3, 4})
if i == -1 {
fmt.Println("no such item")
return
}
fmt.Println("t[", i, "] =", t[i]) // t[ 1 ] = {3 4}
}
Ausgabe:
t[ 1 ] = {3 4}
Wenn Sie den Index des Artikels benötigen, können Sie Funktion, wie dieser Arbeitsbeispielcode verwenden:
package main
import "fmt"
type A struct {
id int
value int
}
//it returns the index of the first instance of item in slice, or -1 if item is not present in slice.
func find(t []A, a A) int {
for i := 0; i < len(t); i++ {
if t[i].id == a.id && t[i].value == a.value {
return i
}
}
return -1
}
func main() {
t := []A{A{1, 2}, A{3, 4}, A{5, 6}}
i := find(t, A{3, 4})
if i == -1 {
fmt.Println("no such item")
return
}
fmt.Println("t[", i, "] =", t[i]) // t[ 1 ] = {3 4}
}
Ausgang:
t[ 1 ] = {3 4}
Warum übergibst du 'a.id' oder' a.value' nicht direkt an die struct? – tkausl
lassen Sie mich das Problem überarbeiten. – ryan
Ihr Beispiel weist mehrere Kompilierungsfehler auf, sodass es schwierig ist, genau zu wissen, was Sie zu tun versuchen. – JimB