map之类数据集合的几个代码小例子
2017-06-25 12:52
337 查看
Map之类的一些KV存储数据集合之类,在业务中使用蛮广泛的,其中,在CodeReview中发现,希望用map存储数据,但又能有序取出数据,以及并发安全map的需求出现的比较多,而各自的代码实现都有点绕,其实有更好的封装,大家直接拿过来用就好了。
给几个例子:
Blog: http://blog.csdn.net/xcltapestry
给几个例子:
package main /* 几个集合的小例子 Author: XCL Date: 2017-6-25 */ import ( "fmt" "sort" "sync" "utils" "golang.org/x/sync/syncmap" ) var ( data = []string{"bb", "aa", "1d", "ee", "cc"} ) func main() { fmt.Println("---------------------------------") fmt.Println(" 有序集合(map + sort) ") fmt.Println("---------------------------------") map1() fmt.Println("---------------------------------") fmt.Println(" 有序集合(左倾红黑树) ") fmt.Println("---------------------------------") map2() fmt.Println("---------------------------------") fmt.Println(" 并发map(golang.org/x/sync/syncmap) ") fmt.Println("---------------------------------") map3() } func map1() { // map = c++ unordered_map = 哈希表 m := make(map[string]string) for _, v := range data { m[v] = v } keys := make([]string, 0, len(m)) for _, v := range m { keys = append(keys, v) } sort.Strings(keys) for _, k := range keys { fmt.Println("map1:", k, " => ", m[k]) } } func map2() { // <<Programming in Go>>中的omap = c++ map = 红黑树 // C++ http://www.teachsolaisgames.com/articles/balanced_left_leaning.html m := utils.NewCaseFoldedKeyed() for _, v := range data { m.Insert(v, v) } m.Do(func(k, v interface{}) { fmt.Println("map2:", k, " => ", v) }) } func map3() { // 并发map // golang.org/x/sync/syncmap m := new(syncmap.Map) var wg sync.WaitGroup for i := 0; i < 10; i++ { wg.Add(1) go func(v int) { defer wg.Done() m.Store(v, v*10) }(i) } wg.Wait() m.Range(func(ki, vi interface{}) bool { k, v := ki.(int), vi.(int) fmt.Println("map3.range:", k, " => ", v) return true }) } /* 输出: --------------------------------- 有序集合(map + sort) --------------------------------- map1: 1d => 1d map1: aa => aa map1: bb => bb map1: cc => cc map1: ee => ee --------------------------------- 有序集合(左倾红黑树) --------------------------------- map2: 1d => 1d map2: aa => aa map2: bb => bb map2: cc => cc map2: ee => ee --------------------------------- 并发map(golang.org/x/sync/syncmap) --------------------------------- map3.range: 1 => 10 map3.range: 0 => 0 map3.range: 5 => 50 map3.range: 8 => 80 map3.range: 3 => 30 map3.range: 2 => 20 map3.range: 4 => 40 map3.range: 7 => 70 map3.range: 6 => 60 map3.range: 9 => 90 */上面列了最简单的用法,当然还有更多用法可以去看代码实现。
Blog: http://blog.csdn.net/xcltapestry
相关文章推荐
- Control Study -> Asp.net几个较复杂数据控件(Repeater/DataList/DataGrid)用法 (示例代码下载)
- Control Study -> Asp.net几个较复杂的显示数据控件(Repeater/DataList/DataGrid)用法 (示例代码下载)
- 几个能用的C语言IO读写数据的例子
- SequenceInputStream类的简单介绍。以及用该类合并集合文件数据的程序代码。
- 几个很不错的.NET 相关的FAQ和例子代码的连接
- 数据结构--几个经典例子需要掌握
- C#中DataGridView绑定了DataTable后,通过代码修改DataGridView中的数据,总有一行(被修改过并被用户选中的行集合中索引为0的行)不能被UpDate回数据库的问题和解决办法
- 循环获取Map集合数据
- C++中提供了多种基本的数据类型。实际上,这些远不能满足我们的需求,如复数(第10章的例子大多是处理虚数的),再如分数。本任务将设计一个简单的分数类,完成对分数的几个运算。一则巩固基于对象编程的方法,
- 黑马程序员---Map集合中的几个小知识点
- Control Study -> Asp.net几个较复杂的显示数据控件(Repeater/DataList/DataGrid)用法 (示例代码下载)
- 让DBA去写数据访问层(DAL)代码--PDF.NET数据开发框架之SQL-MAP使用图解
- Flex's HTTPService 数据交互代码大集合
- 用于学习 Java 集合的 小例子(ArrayList,map)
- 拷贝字符串中指定数据的代码例子
- Request从几个集合取数据是有顺序的
- sql 存储过程 几个 简单例子,及在asp.net(C#)中调用存储过程的代码
- Perl模块使用 => 简短例子代码集合(转帖)
- 代码优化,实现集合的遍历,获取满足条件的数据
- Hibernate Map集合映射简单例子