Mise en œuvre efficace d'un canal distinct dans Go
Dans Go, la mise en œuvre efficace d'un canal qui génère des valeurs distinctes pose un défi. Une solution courante consiste à exploiter une carte de hachage pour suivre les valeurs rencontrées précédemment.
Canal unique :
Une stratégie consiste à créer un « canal unique » qui filtre les valeurs en double. . Ceci peut être réalisé en conservant une carte où les clés représentent des valeurs et les valeurs représentent une valeur sentinelle, telle que struct{}{}.
<code class="go">type UniqueChannel chan int func NewUniqueChannel(min, max int) UniqueChannel { ch := make(UniqueChannel) go func() { m := make(map[int]struct{}, max-min) for i := 0; i < 1000; i++ { v := min + rand.Intn(max) if _, ok := m[v]; !ok { ch <- v m[v] = struct{}{} } } close(ch) }() return ch }</code>
Cette approche garantit que seules des valeurs distinctes sont envoyées sur le canal.
Considérations relatives à la mémoire :
Bien que l'utilisation d'une carte de hachage filtre efficacement les doublons, il existe un problème potentiel de fuite de mémoire. La carte peut continuer à croître indéfiniment, épuisant potentiellement les ressources mémoire. Pour atténuer ce risque, envisagez de mettre en œuvre des mécanismes de nettoyage ou d'utiliser une carte délimitée de taille limitée.
Exemple d'utilisation :
<code class="go">func main() { ch := NewUniqueChannel(1, 10) for v := range ch { fmt.Println(v) } }</code>
Ce code imprimera des valeurs uniques dans la plage [1, 10] sans aucun doublon.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!