gpt4 book ai didi

dictionary - 将 map 用于其具有用户定义类型的设置属性

转载 作者:IT王子 更新时间:2023-10-29 01:11:44 24 4
gpt4 key购买 nike

我正在尝试使用内置 map 类型作为我自己的类型(在本例中为点)的集合。问题是,当我为 map 分配一个点,然后创建一个新的但相等的点并将其用作键时, map 的行为就好像该键不在 map 中一样。这不可能吗?

// maptest.go

package main

import "fmt"

func main() {
set := make(map[*Point]bool)

printSet(set)
set[NewPoint(0, 0)] = true
printSet(set)
set[NewPoint(0, 2)] = true
printSet(set)

_, ok := set[NewPoint(3, 3)] // not in map
if !ok {
fmt.Print("correct error code for non existent element\n")
} else {
fmt.Print("incorrect error code for non existent element\n")
}

c, ok := set[NewPoint(0, 2)] // another one just like it already in map
if ok {
fmt.Print("correct error code for existent element\n") // should get this
} else {
fmt.Print("incorrect error code for existent element\n") // get this
}

fmt.Printf("c: %t\n", c)
}

func printSet(stuff map[*Point]bool) {
fmt.Print("Set:\n")
for k, v := range stuff {
fmt.Printf("%s: %t\n", k, v)
}
}

type Point struct {
row int
col int
}

func NewPoint(r, c int) *Point {
return &Point{r, c}
}

func (p *Point) String() string {
return fmt.Sprintf("{%d, %d}", p.row, p.col)
}

func (p *Point) Eq(o *Point) bool {
return p.row == o.row && p.col == o.col
}

最佳答案

package main

import "fmt"

type Point struct {
row int
col int
}

func main() {
p1 := &Point{1, 2}
p2 := &Point{1, 2}
fmt.Printf("p1: %p %v p2: %p %v\n", p1, *p1, p2, *p2)

s := make(map[*Point]bool)
s[p1] = true
s[p2] = true
fmt.Println("s:", s)

t := make(map[int64]*Point)
t[int64(p1.row)<<32+int64(p1.col)] = p1
t[int64(p2.row)<<32+int64(p2.col)] = p2
fmt.Println("t:", t)
}

Output:
p1: 0x7fc1def5e040 {1 2} p2: 0x7fc1def5e0f8 {1 2}
s: map[0x7fc1def5e0f8:true 0x7fc1def5e040:true]
t: map[4294967298:0x7fc1def5e0f8]

如果我们创建指向两个具有相同坐标的Point p1p2 的指针,它们指向不同的地址。

s := make(map[*Point]bool) 创建一个映射,其中键是指向分配给 Point 的内存的指针,值为 bool 值值(value)。因此,如果我们将元素 p1p2 分配给 map s 那么我们就有两个不同的 map 键和两个具有相同坐标的不同 map 元素.

t := make(map[int64]*Point) 创建一个 map ,其中键是 Point 坐标的组合,值是指针到 Point 坐标。因此,如果我们将元素 p1p2 分配给 map t ,那么我们就有了两个相同的 map 键和一个具有共享坐标的 map 元素。

关于dictionary - 将 map 用于其具有用户定义类型的设置属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4707790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com