Go基础编程实践(四)—— Map和数组

数组去重

package main

import "fmt"

func main(){
  intSlice := []int{1,5,5,5,5,7,8,6,6, 6}
  fmt.Println(intSlice)
  uniqueIntSlice := unique(intSlice)
  fmt.Println(uniqueIntSlice)
}

func unique(intSlice []int) []int{
  keys := make(map[int]bool)
  uniqueElements := []int{}
  for _,entry := range intSlice {
    if _, value := keys[entry]; !value{
      keys[entry] =true
      uniqueElements = append(uniqueElements, entry)
    }
  }
  return uniqueElements
}

查找元素

package main

import (
  "fmt"
  "sort"
)

func main() {
  str := []string{"Sandy", "Provo", "St.george", "Salt lake City", "Draper", "South Jordan", "Murray"}

  // for循环查找
  for i, v := range str {
    if v == "Sandy" {
      fmt.Println(i)
    }
  }

  // sort包排序后查找
  // StringSlice给[]string添加方法以满足Interface接口,以便排序为递增序列。
  sortedList := sort.StringSlice(str)
  // 升序
  sortedList.Sort()
  fmt.Println(sortedList)
  index := sortedList.Search("Sandy")
  fmt.Println(index)
}

数组降序

package main

import (
  "sort"
  "fmt"
)

func main() {
  numbers := []int{1, 5, 3, 6, 2, 10, 8}
  // IntSlice给[]int添加方法以满足Interface接口,以便排序为递增序列。
  tobeSorted := sort.IntSlice(numbers)
  // Reverse包装一个Interface接口并返回一个新的Interface接口,对该接口排序可生成递减序列。
  sort.Sort(sort.Reverse(tobeSorted))
  fmt.Println(tobeSorted)
}

迭代数组

package main

import "fmt"

func main(){
  numbers := []int{1, 5, 3, 6, 2, 10, 8}

  for index,value := range numbers{
     fmt.Printf("Index: %v and Value: %v\n", index, value)
  }
}

将map转为数组

package main

import "fmt"

type NameAge struct{
  Name string
  Age int
}

func main(){
  var nameAgeSlice []NameAge
  nameAges := map[string]int{
    "Michael": 30,
    "John": 25,
    "Jessica": 26,
    "Ali": 18,
  }
  for key, value := range nameAges{
    nameAgeSlice = append(nameAgeSlice, NameAge {key, value})
  }

  fmt.Println(nameAgeSlice)

}

合并数组

package main

import "fmt"

func main(){
  items1 := []int{3,4}
  items2 := []int{1,2}
  result := append(items1, items2...)
  fmt.Println(result)
}

合并map

package main

import "fmt"

func main(){
  map1 := map[string]int {
   "Michael":10,
   "Jessica":20,
   "Tarik":33,
   "Jon": 22,
  }
  fmt.Println(map1)

  map2 := map[string]int {
    "Lord":11,
    "Of":22,
    "The":36,
    "Rings": 23,
  }
  for key, value := range map2{
    map1[key] = value
  }
  fmt.Println(map1)
}

判断map中key是否存在

package main

import "fmt"

func main() {
  nameAges := map[string]int{
    "Tarik": 32,
    "Michael": 30,
    "Jon": 25,
    "Jessica" : 20,
  }
  if _, exists := nameAges["Jessica"]; exists{
    fmt.Println("Jessica can be found")
  }else {
    fmt.Println("Jessica cannot be found")
  }
}

原文地址:https://www.cnblogs.com/GaiHeiluKamei/p/11140619.html

时间: 2024-10-01 07:51:27

Go基础编程实践(四)—— Map和数组的相关文章

关于shell脚本基础编程第四篇

shell脚本基础编程第四篇本章主要内容:函数 函数 function:             function 名称 { 命令 ; } 或 name () { 命令 ; }           定义 shell 函数.               创建一个以 NAME 为名的 shell 函数.当作为一个简单的命令启用时,           NAME 函数执行调用 shell 的上下文中的 COMMANDs 命令.当 NAME           被启用时,参数作为 $1...$n 被传递

并发编程实践四:实现正确和高效的锁

你是否觉得锁是一种很神奇的东西,在并发编程中,你只需要将你的代码加上锁,就能保证代码是线程安全的(当然现实和感觉有很大差别,代码的线程安全是非常复杂的),那么,这些都是怎么做到的呢?当存在大量线程同时竞争锁时,竞争失败的锁会怎么做呢?锁又是怎么保证这一切高效的执行的呢?这篇文章将为你回答这些问题,首先我将介绍怎样实现一个正确的锁,然后介绍高效的锁应该具备的条件,最后将介绍两种常用的队列锁算法:CLH锁和MCS锁. 文中将用到一些原子变量的特性,你可以将原子变量看作加强版的volatile变量,具

PHP基础入门(四)---PHP数组实用基础知识

PHP数组 数组是特殊的变量,它可以同时保存一个以上的值. ***关键词:数组基础.数组遍历.超全局数组.数组功能.数组函数. 下面来和大家分享一下有关PHP的数组基础知识,希望对你PHP的学习有所帮助~ 一.PHP数组基础部分 一PHP数组的分类 按照下标的不同,PHP数组分为关联数组和索引数组:索引数组:下标从0开始,依次增长关联数组:下标为字符串格式,每个下标字符串与数组的值一一关联对应(类似对象的键值对) 代码演示: 1 $arr1 = array(1,2,3,4,5,6,7);//索引

Go基础编程实践——字符串

修剪空格 strings包中的TrimSpace函数用于去掉字符串首尾的空格. package main import ( "fmt" "strings" ) func main() { helloWorld := "\t Hello, World " trimHello := strings.TrimSpace(helloWorld) fmt.Printf("%d %s\n", len(helloWorld), helloW

Go基础编程实践(六)—— 文件

检查文件是否存在 在此程序同目录下创建log.txt文件,以检测. package main import ( "os" "fmt" ) func main() { if _, err := os.Stat("log.txt"); err == nil { fmt.Println("Log.txt file exists") } } 检查文件是否不存在 package main import ( "os"

Go基础编程实践(八)—— 系统编程

捕捉信号 // 运行此程序,控制台将打印"Waiting for signal" // 按Ctrl + C 发送信号以关闭程序,将发生中断 // 随后控制台依次打印"Signal .."."Exiting..." package main import ( "os" "os/signal" "syscall" "fmt" ) func main() { // 缓冲通道

Go基础编程实践(十)—— 数据库

从数据库中读取数据 在http://sqlitebrowser.org/下载sqlite3可视化工具,在本main.go同目录下创建personal.db数据库,创建表如下: package main import ( "database/sql" "fmt" _ "github.com/mattn/go-sqlite3" ) // 用struct类型将来自SQL数据库的数据映射到内存中的对象 type Profile struct { Prof

并发编程实践五:ReentrantLock

ReentrantLock是一个可重入的互斥锁,实现了接口Lock,和synchronized相比,它们提供了相同的功能,但ReentrantLock使用更灵活,功能更强大,也更复杂.这篇文章将为你介绍ReentrantLock,以及它的实现机制. ReentrantLock介绍 通常,ReentrantLock按下面的方式使用: public class ReentrantLockTest { private final ReentrantLock lock = new ReentrantLo

小猪猪逆袭成博士之C++基础篇(四)数组、指针、vector、迭代器

小猪猪逆袭成博士之C++基础篇(四) 关键词:数组,Vector. 一.数组与指针 数组相信大家学过C语言或者其他的语言都不陌生,简单的就是同一个变量类型的一组数据.例如:int a[10],意思就是从a开始有10个连续的int大小的空间.我们还是从初始化说起. 我们以数据类型int为例,当然也可由有很多的数据类型,可以是像int,double这种,也可以是自定义的类,一般的初始化方法有: int a[10]; int a[10]={0}; int a[3]={0,1,2}; 在前面的文章中,有