gpt4 book ai didi

data-structures - 在 golang 中实现嵌套矩阵的惯用方式

转载 作者:IT王子 更新时间:2023-10-29 02:17:56 25 4
gpt4 key购买 nike

  1. 我正在尝试在内存中表示超图。除了嵌套矩阵之外,对于这项任务还有更好的数据结构吗?嵌套矩阵是一个可以包含“ native ”类型(为简单起见,我们说 int)和矩阵元素的矩阵。

  2. 这是这样一个矩阵的开始。代码中是否有任何粗糙的边缘,以使其看起来更惯用?如何让它看起来更地道?

代码:

package main

import "fmt"

type Matricial interface {
Put(interface{}, ...int)
Get(...int) interface{}
}

type Matrix struct {
Matricial
values map[int]interface{}
}

func NewMatrix() *Matrix {
m := &Matrix{}
m.values = make(map[int]interface{})
return m
}

func (m *Matrix) Set(atom interface{}, pos ...int) {
firstdim := pos[0]
if val, ok := m.values[firstdim]; ok {
fmt.Println("map key exists", val)
switch converted := val.(type) {
case int:
m.values[firstdim] = converted
default:
fmt.Println("ERR: unknown type: %T", val)
}
} else {
if len(pos[1:]) > 0 {
newm := NewMatrix()
m.values[firstdim] = newm
newm.Set(atom, pos[1:]...)
} else {
m.values[firstdim] = atom
}
}
}
func (m *Matrix) Get(pos ...int) interface{} {
if len(pos) == 1 {
return m.values[pos[0]]
} else {
switch accessor := m.values[pos[0]].(type) {
case Matricial:
return accessor.Get(pos[1:]...)
default:
return nil
}
}
return nil
}

func main() {
m := NewMatrix()
m.Set(42, 2, 3, 4)
m.Set(43, 0)
fmt.Println(m.Get(2, 3))
fmt.Println(m.Get(2, 3, 4))
fmt.Println(m.Get(0))
}

数据结构必须允许将超边与其他超边连接起来(即像处理节点一样处理超边)。

最佳答案

  1. 嵌套矩阵(采用您对术语的定义)似乎是超图的合理表示,但对您的应用程序一无所知。一个示例 Go 实现是 power set Rosetta 代码中的示例。

  2. 嵌入界面不是惯用的。例如,如果您将 Matricial 的 Put 方法重命名为 Set,这就是我想您的意思,那么您只需删除 Matrix 的 Matricial 字段,您的程序就会产生相同的输出。

关于data-structures - 在 golang 中实现嵌套矩阵的惯用方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19168535/

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