Próbuję utworzyć mapę w Go, która jest kluczowana przez duże liczby całkowite. Effective Go wyraźnie mówi, że:Skomplikowane typy danych jako klucze na mapach w Go
Struktury, tablice i plasterki nie mogą być używane jako klucze map, ponieważ równość nie jest zdefiniowana dla tych typów.
co ma sens. Mógłbym oczywiście przekonwertować duże liczby całkowite na łańcuchy i użyć łańcucha jako klucza, ale szukam tutaj bardziej ogólnego rozwiązania. Czy mogę zawinąć moją strukturę w coś (interfejs?), Który implementuje funkcję równości i używa jej zamiast tego?
przykład kodu, który oczywiście nie działa:
package main
import (
"big"
"fmt"
)
func main() {
one1 := big.NewInt(1)
one2 := big.NewInt(1)
hmap := make(map[*big.Int] int)
hmap[one1] = 2
_, exists := hmap[one2]
fmt.Printf("Exists=%v\n", exists)
}
to nie tylko równość. 'map' jest tablicą asocjacyjną, więc każdy typ klucza również potrzebuje funkcji mieszania – newacct
True. I zapomniałem, że odkąd big.Int jest zmienny (co mi się nie podoba) umieszczenie ich w tablicach hash może nie być tak mądre. Może powinienem trzymać się funkcjonalnego programowania :) – Olof