Golang如何从orderedmap列表中获取数据

Golang如何从orderedmap列表中获取数据

package main

import (
	"fmt"
	"github.com/iancoleman/orderedmap"
)

type User struct {
	UserName string
	Category string
	Age      int
}

type Users []User

func (u Users) NameList() []string {
	var list []string
	for _, user := range u {
		list = append(list, user.Category, user.UserName)
	}
	return list
}

func main() {
	users := Users{
		User{UserName: "Bryan", Category: "Human", Age: 33},
		User{UserName: "Jane", Category: "Rocker", Age: 25},
		User{UserName: "Nancy", Category: "Mother", Age: 40},
		User{UserName: "Chris", Category: "Dude", Age: 19},
		User{UserName: "Martha", Category: "Cook", Age: 52},
	}

	UserList := users.NameList()

	fmt.Println(UserList)

	o := orderedmap.New()
	o.Set("Bryan", User{UserName: "Bryan", Category: "Human", Age: 33})
	o.Set("Jane", User{UserName: "Jane", Category: "Rocker", Age: 25})
	o.Set("Nancy", User{UserName: "Nancy", Category: "Mother", Age: 40})
	o.Set("Chris", User{UserName: "Chris", Category: "Dude", Age: 19})
	o.Set("Martha", User{UserName: "Martha", Category: "Cook", Age: 52})

	keys := o.Keys()
	for _, k := range keys {
		_, _ = o.Get(k)

		_interface, _ := o.Get(k)
		_Array := _interface.(User.UserName)

	}
}

更多关于Golang如何从orderedmap列表中获取数据的实战教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复
package main

import (
	"fmt"
	"github.com/iancoleman/orderedmap"
)

type User struct {
	UserName string
	Category string
	Age      int
}

type Users []User

func (u Users) NameList() []string {
	var list []string
	for _, user := range u {
		list = append(list, user.Category, user.UserName)
	}
	return list
}

func main() {
	users := Users{
		User{UserName: "Bryan", Category: "Human", Age: 33},
		User{UserName: "Jane", Category: "Rocker", Age: 25},
		User{UserName: "Nancy", Category: "Mother", Age: 40},
		User{UserName: "Chris", Category: "Dude", Age: 19},
		User{UserName: "Martha", Category: "Cook", Age: 52},
	}

	UserList := users.NameList()

	fmt.Println(UserList)

	o := orderedmap.New()
	o.Set("Bryan", User{UserName: "Bryan", Category: "Human", Age: 33})
	o.Set("Jane", User{UserName: "Jane", Category: "Rocker", Age: 25})
	o.Set("Nancy", User{UserName: "Nancy", Category: "Mother", Age: 40})
	o.Set("Chris", User{UserName: "Chris", Category: "Dude", Age: 19})
	o.Set("Martha", User{UserName: "Martha", Category: "Cook", Age: 52})

	keys := o.Keys()
	for _, k := range keys {
		_, _ = o.Get(k)

		_interface, _ := o.Get(k)
		x := _interface.(User)
		fmt.Println("Packs : ", x.UserName)

	}
}

问题已解决。

更多关于Golang如何从orderedmap列表中获取数据的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


orderedmap 中获取数据需要使用类型断言将 interface{} 转换为具体类型。以下是修正后的代码示例:

package main

import (
	"fmt"
	"github.com/iancoleman/orderedmap"
)

type User struct {
	UserName string
	Category string
	Age      int
}

func main() {
	o := orderedmap.New()
	o.Set("Bryan", User{UserName: "Bryan", Category: "Human", Age: 33})
	o.Set("Jane", User{UserName: "Jane", Category: "Rocker", Age: 25})
	o.Set("Nancy", User{UserName: "Nancy", Category: "Mother", Age: 40})
	o.Set("Chris", User{UserName: "Chris", Category: "Dude", Age: 19})
	o.Set("Martha", User{UserName: "Martha", Category: "Cook", Age: 52})

	// 方法1:遍历Keys获取数据
	keys := o.Keys()
	for _, key := range keys {
		value, exists := o.Get(key)
		if exists {
			user := value.(User)
			fmt.Printf("Key: %s, UserName: %s, Age: %d\n", key, user.UserName, user.Age)
		}
	}

	// 方法2:直接通过键名获取特定数据
	if bryan, exists := o.Get("Bryan"); exists {
		user := bryan.(User)
		fmt.Printf("\n获取特定用户: %s, Category: %s\n", user.UserName, user.Category)
	}

	// 方法3:获取所有数据并处理
	fmt.Println("\n所有用户数据:")
	for _, key := range o.Keys() {
		val, _ := o.Get(key)
		user := val.(User)
		fmt.Printf("- %s: %+v\n", key, user)
	}
}

输出结果:

Key: Bryan, UserName: Bryan, Age: 33
Key: Jane, UserName: Jane, Age: 25
Key: Nancy, UserName: Nancy, Age: 40
Key: Chris, UserName: Chris, Age: 19
Key: Martha, UserName: Martha, Age: 52

获取特定用户: Bryan, Category: Human

所有用户数据:
- Bryan: {UserName:Bryan Category:Human Age:33}
- Jane: {UserName:Jane Category:Rocker Age:25}
- Nancy: {UserName:Nancy Category:Mother Age:40}
- Chris: {UserName:Chris Category:Dude Age:19}
- Martha: {UserName:Martha Category:Cook Age:52}

关键点:

  1. o.Get(key) 返回 (interface{}, bool),需要类型断言转换为 User
  2. 使用 value.(User) 进行类型断言
  3. 第二个返回值 exists 表示键是否存在
  4. orderedmap 保持插入顺序,o.Keys() 按插入顺序返回键列表
回到顶部