Golang中如何遍历Map的键值对

Golang中如何遍历Map的键值对 在使用Map时,我得到了以下结果:

map: map[17:1]
map: map[8191:6]
map: map[8191:7]
map: map[8191:7]
map: map[17:2]

我需要从Map中分别提取8191键对应的值和17键对应的值,如下所示:

8191的结果:6,7,7
17的结果:1,2

如何实现这个需求?

// 此处应放置实现代码
8 回复

好的。我会创建一些数据并发布。

谢谢。

更多关于Golang中如何遍历Map的键值对的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


抱歉,但我没有真正理解您的要求。

您能否在playground上编写一个小程序,展示您的输入数据以及您希望如何处理它,或者至少说明预期数据应该是什么样子(使用Go语法)?

如果我说错了请纠正我。 你最终需要类似这样的东西 所以,你需要事先将值存储在切片中,就像这样 示例代码链接

在你的代码中没有任何返回,只是进行了打印。

此外,由于你只展示了一个仅初始化了单个键值对并打印一次的代码片段,我不得不假设在每次迭代中之前的地图都会丢失。

基于这个假设,你无法对历史记录进行任何操作。

首先需要实现一个合适的历史记录机制。

不过我仍然不太明白你想要实现什么。

因此我再次询问,能否在合适的playground中展示你的输入和期望的输出。

再次强调,请使用规范的Go代码来描述你实际的数据和期望的数据,而不是使用那些无法说明任何问题的伪调试输出。

谢谢,

我创建了以下示例代码: https://play.golang.org/p/ln2lhcDQC24

我需要从中分别提取键8191和17的值,并计算这些值之间的差值。 例如: map: map[8191:0] map: map[8191:1] map: map[8191:2] map: map[8191:2]

map: map[17:1] map: map[17:2] map: map[17:7] map: map[17:9]

我需要获取所有8191键对应的值,并计算值0和1之间的差值(结果为1),以及值2和2之间的差值(结果为0)。同样地,我也需要对键17执行相同的操作。

你好

我认为将值存储为以下形式会更好:

map[uint16][]uint8

这样你就可以轻松查找17和8191并获取正确的值

https://play.golang.org/p/XKt_JSpC08g

package main

import (
	"fmt"
)

func main() {
	m := make(map[uint16][]uint8)
	
	m[17] = append(m[17], 1)
	
	m[8191] = append(m[8191], 6)
	m[8191] = append(m[8191], 7)
	m[8191] = append(m[8191], 7)
	m[17] = append(m[17], 2)
		
	fmt.Println(m)
	
	fmt.Println(m[17])
	fmt.Println(m[8191])
}

我的需求 - 我需要根据PID(包标识符)从视频中获取连续性计数器值,并验证PID是否具有正确的连续性计数器值。

		m := make(map[uint16]uint8)
		m[pid] = cc
		fmt.Println("map:", m)

上述代码中,PID将返回8191和17的值,而CC(连续性计数器)将返回1、6、7、7等值。因此我创建了一个映射表来基于PID查找连续性计数器,这将返回以下结果: map: map[17:1] map: map[8191:6] map: map[8191:7] map: map[8191:7] map: map[17:2]

基于此,我需要根据PID来分离CC值。由于代码量很大,我无法完整发布。

谢谢!

在Go语言中,可以通过遍历map并使用条件判断来提取特定键对应的值。以下是实现代码:

package main

import "fmt"

func main() {
    // 假设这是你的原始数据
    maps := []map[int]int{
        {17: 1},
        {8191: 6},
        {8191: 7},
        {8191: 7},
        {17: 2},
    }

    // 创建切片来存储特定键的值
    var values8191 []int
    var values17 []int

    // 遍历所有map
    for _, m := range maps {
        // 检查并提取键8191对应的值
        if val, exists := m[8191]; exists {
            values8191 = append(values8191, val)
        }
        
        // 检查并提取键17对应的值
        if val, exists := m[17]; exists {
            values17 = append(values17, val)
        }
    }

    // 输出结果
    fmt.Printf("8191的结果:")
    for i, val := range values8191 {
        if i > 0 {
            fmt.Print(",")
        }
        fmt.Print(val)
    }
    fmt.Println()

    fmt.Printf("17的结果:")
    for i, val := range values17 {
        if i > 0 {
            fmt.Print(",")
        }
        fmt.Print(val)
    }
    fmt.Println()
}

输出结果:

8191的结果:6,7,7
17的结果:1,2

如果需要更通用的解决方案,可以使用map来存储所有键对应的值集合:

package main

import "fmt"

func main() {
    maps := []map[int]int{
        {17: 1},
        {8191: 6},
        {8191: 7},
        {8191: 7},
        {17: 2},
    }

    // 使用map来存储所有键对应的值
    result := make(map[int][]int)

    // 遍历所有map
    for _, m := range maps {
        for key, value := range m {
            result[key] = append(result[key], value)
        }
    }

    // 输出特定键的结果
    fmt.Printf("8191的结果:")
    for i, val := range result[8191] {
        if i > 0 {
            fmt.Print(",")
        }
        fmt.Print(val)
    }
    fmt.Println()

    fmt.Printf("17的结果:")
    for i, val := range result[17] {
        if i > 0 {
            fmt.Print(",")
        }
        fmt.Print(val)
    }
    fmt.Println()
}

这两种方法都能实现你的需求,第一种方法针对特定键进行提取,第二种方法可以处理任意键的情况。

回到顶部