Golang——4、数组、切片和map

article/2025/6/21 22:07:57

数组、切片和map

  • 1、数组
    • 1.1、数组定义
    • 1.2、数组的初始化
    • 1.3、数组的遍历
    • 1.4、数组是值类型
    • 1.5、多维数组
  • 2、切片
    • 2.1、切片的定义
    • 2.2、关于nil
    • 2.3、切片的遍历
    • 2.4、基于数组定义切片
    • 2.5、基于切片定义切片
    • 2.6、关于切片的长度和容量
    • 2.7、切片的本质
    • 2.8、使用make函数构造切片
    • 2.9、append()方法为切片添加元素
    • 2.10、使用copy()函数复制切片
    • 2.11、从切片中删除元素
    • 2.12、修改字符串
  • 3、排序算法和sort包
    • 3.1、选择排序
    • 3.2、冒泡排序
    • 3.3、sort包
  • 4、map
    • 4.1、map基本使用
    • 4.2、map的curd操作
    • 4.3、元素为map类型的切片
    • 4.4、值为切片类型的map
    • 4.5、map类型是引用数据类型
    • 4.6、按照key升序输出map
    • 4.7、编写一个程序统计字符串中单词出现的次数

1、数组

1.1、数组定义

数组是指一系列同一类型数据的集合。 数组中包含的每个数据被称为数组元素(element),这种类型可以是任意的原始类型, 比如int、string等, 也可以是用户自定义的类型。一个数组包含的元素个数被称为数组的长度。在Golang中数组是一个长度固定的数据类型,数组的长度是类型的一部分,也就是说[5]int和[10]int是两个不同的类型。Golang中数组的另一个特点是占用内存的连续性,也就是说数组中的元素是被分配到连续的内存地址中的,因而索引数组元素的速度非常快。

和数组对应的类型是Slice(切片) ,Slice是可以增长和收缩的动态序列,功能也更灵活,但是想要理解Slice工作原理的话需要先理解数组,所以本节主要为大家讲解数组的使用。

数组的定义:
在这里插入图片描述

数组的长度也是类型的一部分。

var arr1 [3]int
var arr2 [5]int
var strArr [5]string
fmt.Printf("值: %v, 类型: %T\n", arr1, arr1)
fmt.Printf("值: %v, 类型: %T\n", arr2, arr2)
fmt.Printf("值: %v, 类型: %T\n", strArr, strArr)

在这里插入图片描述


1.2、数组的初始化

方式一:先定义后初始化。

var arr [3]int
arr[0] = 1
arr[1] = 2
arr[2] = 3

方式二:定义的时候初始化。

var arr1 = [3]int{1, 2, 3}
var arr2 = [3]string{"C++", "Java", "Go"}

方式三:一般情况下我们可以让编译器根据初始值的个数自行推断数组的长度。

var arr1 = [...]int{1, 5, 2, 67, 123}
fmt.Println(arr1)
fmt.Println(len(arr1))

在这里插入图片描述

方式四:使用指定索引值的方式来初始化数组。

arr := [...]int{1: 10, 2: 30, 6: 7}
fmt.Println(arr)
fmt.Println(len(arr))

在这里插入图片描述
上面的{}中,冒号左边表示下标,右边表示值,最终数组长度取决于最大的下标,其他没有赋值的下标都为默认值0。


1.3、数组的遍历

方式一:for循环。

var arr = [5]int{1, 2, 3, 4, 5}
for i := 0; i < len(arr); i++ {fmt.Printf("arr[%d]: %d\n", i, arr[i])
}

在这里插入图片描述

方式二:for range遍历。

strArr := [...]string{"C++", "Java", "Golang", "Python"}
for k, v := range strArr {fmt.Printf("strArr[%d]: %s\n", k, v)
}

在这里插入图片描述


1.4、数组是值类型

值类型:改变变量副本值的时候,不会改变变量本身的值。
引用类型:改变变量副本值的时候,会改变变量本身的值。
类似于C++中的引用类型。

值类型:基本数据类型和数组都是值类型。

var arr1 = [...]int{1, 2, 3}
arr2 := arr1
arr2[0] = 10
fmt.Println(arr1)
fmt.Println(arr2)

在这里插入图片描述

下面展示切片,切片是引用类型。

var arr1 = []int{1, 2, 3}  // 切片
arr2 := arr1
arr2[0] = 10
fmt.Println(arr1)
fmt.Println(arr2)

在这里插入图片描述
切片相对于数组区别就在于:数组[]中指明了元素个数,而切片[]中不填写任何值。我们发现拷贝的arr2数组,修改了第一个元素的值后,arr1和arr2数组的第一个元素都变成了10。这是因为arr1和arr2指向的空间是同一块。


1.5、多维数组

Go语言是支持多维数组的,我们这里以二维数组为例(数组中又嵌套数组)。
在这里插入图片描述

二维数组的定义:

var arr = [3][2]string{{"北京", "上海"},{"广州", "深圳"},{"成都", "重庆"},
}
fmt.Println(arr)
fmt.Printf("类型: %T", arr)

在这里插入图片描述

二维数组的另一种定义方式,可以自动推导行,但不可推导列。

var arr = [...][2]string{{"北京", "上海"},{"广州", "深圳"},{"成都", "重庆"},
}

二位数组的两种遍历方式,for和for range。

var arr = [...][2]string{{"北京", "上海"},{"广州", "深圳"},{"成都", "重庆"},
}for i := 0; i < len(arr); i++ {for j := 0; j < len(arr[i]); j++ {fmt.Printf("%s ", arr[i][j])}fmt.Println()
}for _, v1 := range arr {for _, v2 := range v1 {fmt.Printf("%s ", v2)}fmt.Println()
}

2、切片

为什么要有切片?因为数组的长度是固定的并且数组长度属于类型的一部分,所以数组有很多的局限性。

2.1、切片的定义

切片(Slice)是一个拥有相同类型元素的可变长度的序列。它是基于数组类型做的一层封装。它非常灵活, 支持自动扩容。切片是一个引用类型, 它的内部结构包含地址、 长度和容量。
声明切片类型的基本语法如下:

在这里插入图片描述

var arr1 []int
fmt.Printf("值: %v, 类型: %T, 长度: %d\n", arr1, arr1, len(arr1))var arr2 = []int{1, 2, 3, 4}
fmt.Printf("值: %v, 类型: %T, 长度: %d\n", arr2, arr2, len(arr2))var arr3 = []string{1: "java", 2: "C++", 5: "golang"}
fmt.Printf("值: %v, 类型: %T, 长度: %d\n", arr3, arr3, len(arr3))

在这里插入图片描述


2.2、关于nil

当你声明了一个变量,但却还并没有赋值时,golang中会自动给你的变量赋值一个默认零值。
以下是每种类型对应的零值:

bool -> false
numbers -> 0
string-> ""
pointers -> nil
slices -> nil
maps -> nil
channels -> nil
functions -> nil
interfaces -> nil

Golnag中申明切片以后,切片的默认值就是nil。

var arr1 []int
var arr2 = []int{1, 2, 3, 4}
fmt.Println(arr1 == nil)
fmt.Println(arr2 != nil)

在这里插入图片描述


2.3、切片的遍历

和数组是一样的。

var strs = []string{"C++", "java", "golang", "python"}
for i := 0; i < len(strs); i++ {fmt.Printf("%s ", strs[i])
}
fmt.Println()for k, v := range strs {fmt.Println(k, v)
}

2.4、基于数组定义切片

a := [5]int{1, 2, 3, 4, 5}
b := a[:]   // 获取数组里面所有元素
c := a[1:4] // 获取数组里面下标[1, 4)的元素
d := a[2:]  // 获取数组里面下标2开始往后的所有元素
e := a[:2]  // 获取数组里面下标[0, 2)的元素
fmt.Println("a:", a)
fmt.Println("b:", b)
fmt.Println("c:", c)
fmt.Println("d:", d)
fmt.Println("e:", e)

在这里插入图片描述


2.5、基于切片定义切片

a := []string{"C++", "Java", "Go", "Python"}
b := a[2:]
fmt.Println(b)

在这里插入图片描述
基本上同上面的基于数组定义切片。


2.6、关于切片的长度和容量

切片拥有自己的长度和容量,我们可以通过使用内置的len()函数求长度,使用内置的cap()函数求切片的容量。
切片的长度就是它所包含的元素个数。
切片的容量是从它的第一个元素开始数,到其底层数组元素末尾的个数。
切片s的长度和容量可通过表达式len(s)和cap(s)来获取。

先看现象:

a := []int{1, 2, 3, 4, 5, 6}
fmt.Printf("a->长度: %d, 容量: %d\n", len(a), cap(a))b := a[2:]
fmt.Printf("b->长度: %d, 容量: %d\n", len(b), cap(b))c := a[1:3]
fmt.Printf("c->长度: %d, 容量: %d\n", len(c), cap(c))d := a[:3]
fmt.Printf("d->长度: %d, 容量: %d\n", len(d), cap(d))

在这里插入图片描述
在这里插入图片描述
如图所示,切片a的长度和容量都是6没啥好说的。
切片b从下标2开始到数组结束,所以长度为4,容量也为4。
切片c从下标1开始,到下标3,但是是左闭右开区间,因此实际上只有两个元素,对应下标1和2。容量是从该切片c的起始元素也就是下标1开始计算,计算的不是当前数组,而是底层那个完整的数组,所以容量为5。
切片d长度为3很好理解,容量是从第一个元素,也就是0下标开始计算,计算的是底层的数组,所以就是底层数组的整个容量。


2.7、切片的本质

切片的本质就是对底层数组的封装,它包含了三个信息:底层数组的指针、切片的长度(len)和切片的容量(cap)。
举个例子,现在有一个数组a := [8]int{0, 1, 2, 3, 4, 5, 6, 7},切片 s1 := a[:5],相应示意图如下。
在这里插入图片描述

切片s2 := a[3:6], 相应示意图如下:
在这里插入图片描述


2.8、使用make函数构造切片

我们上面都是基于数组来创建的切片,如果需要动态的创建一个切片,我们就需要使用内置的 make()函数, 格式如下:

make([]T, size, cap)

T:切片的元素类型。
size:切片中元素的数量。
cap:切片的容量。

var sliceA = make([]int, 4, 8)
fmt.Printf("值: %d, 长度: %d, 容量: %d\n", sliceA, len(sliceA), cap(sliceA))

在这里插入图片描述

切片之间是不能比较的,我们不能使用==操作符来判断两个切片是否含有全部相等元素。切片唯一合法的比较操作是和nil比较。一个nil值的切片并没有底层数组,一个nil值的切片的长度和容量都是0。但是我们不能说一个长度和容量都是0的切片一定是nil。
所以要判断一个切片是否是空的,要是用len(s) == 0来判断, 不应该使用s == nil来判断。


2.9、append()方法为切片添加元素

Go语言的内建函数append()可以为切片动态添加元素,每个切片会指向一个底层数组,这个数组的容量够用就添加新增元素。当底层数组不能容纳新增的元素时,切片就会自动按照一定的策略进行扩容,此时该切片指向的底层数组就会更换。扩容操作往往发生在append()函数调用时,所以我们通常都需要用原变量接收append函数的返回值。

1、append添加单个元素。

var sliceA []int
sliceA = append(sliceA, 1)
sliceA = append(sliceA, 2)
fmt.Println(sliceA)

在这里插入图片描述

2、append添加多个元素。

var sliceB []int
sliceB = append(sliceB, 1, 2, 3, 4)
fmt.Printf("值: %d, 长度: %d, 容量: %d\n", sliceB, len(sliceB), cap(sliceB))

在这里插入图片描述

3、append还可以合并切片。

sliceA := []string{"C++", "java"}
sliceB := []string{"python", "php"}
sliceA = append(sliceA, sliceB...)
fmt.Printf("值: %v, 长度: %d, 容量: %d\n", sliceA, len(sliceA), cap(sliceA))

在这里插入图片描述

4、切片的扩容策略。

var sliceA []int
for i := 1; i <= 10; i++ {sliceA = append(sliceA, i)fmt.Printf("值: %v, 长度: %d, 容量: %d\n", sliceA, len(sliceA), cap(sliceA))
}

在这里插入图片描述
可以看到,上面的扩容方式是2倍扩容。

有兴趣可以了解一下下面的扩容内容:
在这里插入图片描述
1、首先判断,如果新申请容量(cap)大于2倍的旧容量(old.cap), 最终容量(newcap)就是新申请的容量(cap) 。
2、否则判断,如果旧切片的长度小于1024,则最终容量(newcap)就是旧容量(old.cap)的两倍, 即(newcap=doublecap) 。
3、 否则判断,如果旧切片长度大于等于1024,则最终容量(newcap)从旧容量(old.cap)开始循环增加原来的1/4, 即(newcap=old.cap,for {newcap += newcap/4}) 直到最终容量(newcap) 大于等于新申请的容量(cap), 即(newcap >= cap)
4、 如果最终容量(cap) 计算值溢出, 则最终容量(cap) 就是新申请容量(cap) 。
需要注意的是, 切片扩容还会根据切片中元素的类型不同而做不同的处理, 比如 int 和 string类型的处理方式就不一样。


2.10、使用copy()函数复制切片

由于切片是引用类型,所以修改副本会影响其本身的值,我们可以使用copy函数拷贝一份出来,这样修改副本就不会影响变量本身。

var sliceA = []int{1, 2, 3}
sliceB := make([]int, 3, 3)
copy(sliceB, sliceA)
sliceB[0] = 10
fmt.Println(sliceA)
fmt.Println(sliceB)

在这里插入图片描述


2.11、从切片中删除元素

Go语言中并没有删除切片元素的专用方法,我们可以使用切片本身的特性来删除元素。

a := []int{1, 2, 3, 4, 5, 6}
a = append(a[:2], a[3:]...)
fmt.Printf("值: %v, 长度: %d, 容量: %d\n", a, len(a), cap(a))

在这里插入图片描述
上面删除了数组中的3。


2.12、修改字符串

这个我们在之前有讲过,只不过当时不知道字符串要先转换成的另外一种数据类型,也就是切片。如下:

str1 := "hello world"
arr1 := []byte(str1)
arr1[0] = 'l'
fmt.Println(string(arr1))str2 := "你好golang"
arr2 := []rune(str2)
arr2[0] = '哈'
fmt.Println(string(arr2))

在这里插入图片描述


3、排序算法和sort包

3.1、选择排序

选择排序:进行从小到大排序
概念:通过比较,首先选出最小的数放在第一个位置上,然后在其余的数中选出次小数放在第二个位置上,依此类推,直到所有的数成为有序序列。

var arr = []int{7, 6, 5, 4, 3, 2, 1}
for i := 0; i < len(arr); i++ {for j := i + 1; j < len(arr); j++ {if arr[i] > arr[j] {tmp := arr[i]arr[i] = arr[j]arr[j] = tmp}}
}
fmt.Println(arr)

3.2、冒泡排序

概念:从头到尾,比较相邻的两个元素的大小,如果符合交换条件,交换两个元素的位置。
特点:每一轮比较中,都会选出一个最大的数,放在正确的位置。

var arr = []int{7, 6, 5, 4, 3, 2, 1}
for i := 0; i < len(arr); i++ {for j := 0; j < len(arr)-i-1; j++ {if arr[j] > arr[j+1] {tmp := arr[j]arr[j] = arr[j+1]arr[j+1] = tmp}}
}
fmt.Println(arr)

3.3、sort包

对于int、float64和string数组或是切片的排序,go分别提供了sort.Ints()、sort.Float64s()和sort.Strings()函数,默认都是从小到大排序。

intList := []int{2, 4, 3, 5, 7, 6, 9, 8, 1, 0}
floatList := []float64{4.2, 5.9, 12.4, 10.2, 50.7, 99.9, 31.4, 27.81828, 3.14}
stringList := []string{"a", "c", "b", "z", "x", "w", "y", "d", "f", "i"}
sort.Ints(intList)
sort.Float64s(floatList)
sort.Strings(stringList)
fmt.Println(intList)
fmt.Println(floatList)
fmt.Println(stringList)

在这里插入图片描述

使用sort包排降序会麻烦一些:

intList := []int{2, 4, 3, 5, 7, 6, 9, 8, 1, 0}
floatList := []float64{4.2, 5.9, 12.4, 10.2, 50.7, 99.9, 31.4, 27.81828, 3.14}
stringList := []string{"a", "c", "b", "z", "x", "w", "y", "d", "f", "i"}
sort.Sort(sort.Reverse(sort.IntSlice(intList)))
sort.Sort(sort.Reverse(sort.Float64Slice(floatList)))
sort.Sort(sort.Reverse(sort.StringSlice(stringList)))
fmt.Println(intList)
fmt.Println(floatList)
fmt.Println(stringList)

在这里插入图片描述


4、map

4.1、map基本使用

map是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能使用。
Go语言中map的定义语法如下:

在这里插入图片描述
注意:获取map的容量不能使用cap,cap返回的是数组切片分配的空间大小,不能用于map。要获取map的容量, 可以用len函数。

使用make创建map类型:

var userinfo = make(map[string]string)
userinfo["username"] = "张三"
userinfo["age"] = "18"
userinfo["sex"] = "男"
fmt.Println(userinfo)

在这里插入图片描述

另外两种方式:

var userinfo1 = map[string]string{"username": "张三","age":      "18","sex":      "男",
}
fmt.Println(userinfo1)userinfo2 := map[string]string{"username": "李四","age":      "20","sex":      "女",
}
fmt.Println(userinfo2)

在这里插入图片描述

循环遍历map——for range。

userinfo := map[string]string{"username": "张三","age":      "18","sex":      "男",
}
fmt.Println(userinfo["username"])
for k, v := range userinfo {fmt.Println(k, v)
}

在这里插入图片描述


4.2、map的curd操作

1、创建并修改map类型的数据。

var userinfo1 = make(map[string]string)
userinfo1["username"] = "张三"
userinfo1["age"] = "18"
fmt.Println(userinfo1)var userinfo2 = map[string]string{"username": "张三","age":      "20",
}
userinfo2["username"] = "李四"
fmt.Println(userinfo2)

在这里插入图片描述

2、获取/查找map类型的数据。

var userinfo = map[string]string{"username": "张三","age":      "20",
}
fmt.Println(userinfo["username"]) // 获取v1, ok1 := userinfo["age"]
fmt.Println(v1, ok1)v2, ok2 := userinfo["xxx"]
fmt.Println(v2, ok2)

在这里插入图片描述

3、删除map数据里面的key以及对于的值。
使用delete()内建函数从map中删除一组键值对,delete()函数的格式如下:
delete(map 对象,key)其中,map对象表示要删除键值对的map对象,key表示要删除的键值对的键。

var userinfo = map[string]string{"username": "张三","age":      "18","sex":      "男","height":   "180cm",
}
fmt.Println(userinfo)
delete(userinfo, "age")
fmt.Println(userinfo)

在这里插入图片描述


4.3、元素为map类型的切片

我们想在切片里面放一系列用户的信息,这时候我们就可以定义一个元素为map类型的切片。

var userinfo = make([]map[string]string, 2, 2)
fmt.Println(userinfo)
fmt.Println(userinfo[0] == nil)

在这里插入图片描述
可以看到未初始化的map实际上就是nil。

var userinfo = make([]map[string]string, 2, 2)
fmt.Println(userinfo)
fmt.Println(userinfo[0] == nil)if userinfo[0] == nil {userinfo[0] = make(map[string]string)userinfo[0]["username"] = "张三"userinfo[0]["age"] = "18"userinfo[0]["sex"] = "男"
}if userinfo[1] == nil {userinfo[1] = make(map[string]string)userinfo[1]["username"] = "李四"userinfo[1]["age"] = "20"userinfo[1]["sex"] = "女"
}
fmt.Println(userinfo)for _, v1 := range userinfo {for k2, v2 := range v1 {fmt.Println(k2, v2)}
}

在这里插入图片描述


4.4、值为切片类型的map

如果我们想在map对象中存放一系列的属性的时候,我们就可以把map类型的值定义成切片。

var userinfo = make(map[string][]string)
userinfo["hobby"] = []string{"跑步","爬山","写代码",
}
userinfo["work"] = []string{"C++", "Java", "Python", "Go",
}
fmt.Println(userinfo)

在这里插入图片描述


4.5、map类型是引用数据类型

var userinfo = make(map[string]string)
userinfo["username"] = "张三"
userinfo["age"] = "18"
copy := userinfo
fmt.Println(userinfo)
fmt.Println(copy)copy["username"] = "李四"
fmt.Println(userinfo)
fmt.Println(copy)

在这里插入图片描述


4.6、按照key升序输出map

map1 := make(map[int]int)
map1[10] = 100
map1[1] = 13
map1[4] = 56
map1[8] = 90
map1[11] = 100
map1[2] = 13fmt.Println(map1)
var arr []int
for k, _ := range map1 {arr = append(arr, k)
}
sort.Ints(arr)
for i := 0; i < len(arr); i++ {fmt.Printf("%d:%d\n", arr[i], map1[arr[i]])
}

在这里插入图片描述


4.7、编写一个程序统计字符串中单词出现的次数

str := "how do you do"
var strSlice = strings.Split(str, " ")
var strMap = make(map[string]int)
for _, v := range strSlice {strMap[v]++
}
for k, v := range strMap {fmt.Printf("%s[%d]\n", k, v)
}

在这里插入图片描述


http://www.hkcw.cn/article/swghOBdjAh.shtml

相关文章

tmux+minicom工具使用

tmuxminicom工具使用 tmux使用tmux minicom1. 建立会话2. 会话内执行minicom命令3. Ctrl b d 分离会话4. 查看存在的会话5 .重新进入会话6. 即使SSH断开连接 minicom仍以后台运行7. 进入会话翻看历史数据信息内容 Tmux 使用教程 tmux使用 操作流程 新建会话 tmux n…

油价又要涨 加一箱油或将多花近3元 年内第十一次调价

今晚成品油价将迎来年内的第十一次调整。受地缘局势利好支撑,国际油价在本轮周期内有所上涨。隆众资讯预计,每吨汽、柴油价格将分别上调65元和60元,折合每升92号汽油、95号汽油和0号柴油均将上调0.05元。因此,全国大多数地区的92号汽油零售价将升至7.1-7.2元/升。对于油箱容…

麦田起火他上演黄金抢救 妻子:这一刻他是我和孩子心中的超级英雄

近日,山东,一家三口开收割机路遇麦田起火。丈夫见状,驾驶收割机冲入火海抢收小麦。妻子:这一刻他是我和孩子心中的超级英雄!责任编辑:zx0002

俄男子有30个孩子被授予英雄父亲称号:16年间与不同的女人生了30个孩子

俄男子有30个孩子被授予英雄父亲称号。俄罗斯列宁格勒州一男子荣获稀有的“英雄父亲”称号。他有30个孩子。他42岁第一次成为父亲,之后的16年间,他与不同的女人生了30个孩子。这期间他有合法的妻子。责任编辑:0882

重要提醒!高考前后这几种东西不能晒 打了马赛克也不安全

本周六就高考了,部分考生已经打印了准考证,也有人在朋友圈晒出自己的准考证。但是,发朋友圈也有讲究的,考生和家长请注意,这些东西千万不能晒——1.准考证不能晒。2.身份证不能晒。3.考生号和密码不能晒。4.成绩单或成绩查询页面不能晒。5.志愿填报表不能晒。6.录取通知书…

近期热点论文精选速览

最近能明显感觉到大模型发展日新月异&#xff0c;一周不追踪业内最新动态&#xff0c;自己的知识储备就已经落后了&#xff0c;以后会不定期将最近最新的一些热点论文进行汇总&#xff0c;内容涵盖论文大纲创新点总结实验效果&#xff0c;旨在快速了解最新的技术&#xff0c;会…

《操作系统真相还原》——完善内核

在这里我们用汇编实现了一个打印字符的函数&#xff0c;并在c语言中调用这个函数。 需要注意的是&#xff0c;我们在实现函数是遵循cdecl约定 &#xff08;1&#xff09;调用者将所有参数从右向左入栈。 &#xff08;2&#xff09;被调用者清理参数所占的栈空间。 #include &q…

Labubu荷兰门店6点大排长龙 消费者:排了6个多小时,一次性消费了400欧元

在荷兰唯一一家可以买到Labubu的商店前,排起了至少150米长的队伍。据经营者介绍,每周三周五是补货日,每到补货日,门口6点就会大排长龙。喜欢Labubu的消费者称,很早就来了,已经排了6个多小时,并一次性消费了400欧元。责任编辑:zx0002

男子拖拽6岁女童进小巷将被追究刑责 嫌疑人已被拘留

警情通报2025年5月20日下午,38岁的刘某某酒后在娄底市娄星区涟滨中街附近拖拽一名6岁女童进入居民区巷子,被居民及时制止并报警。民警迅速赶到现场将刘某某控制。经侦查,刘某某因涉嫌寻衅滋事已被拘留,并将依法追究其刑事责任。公安机关坚决依法打击危害人民群众生命财产安…

U-ResNet 改进:集成特征金字塔网络(FPN)

UResNet模型设计与实现汇报 1. 项目概述 本次汇报介绍一个基于U-Net和ResNet的混合模型——UResNet,该模型结合了U-Net的编码器-解码器结构和ResNet的残差连接,用于图像分割任务。模型中还集成了特征金字塔网络(FPN),以增强多尺度特征提取能力。 2. 模型架构详解 2.1 核心…

经典数学教材推荐(AI相关)

【1】线性代数的艺术 The-Art-of-Linear-Algebra-zh-CN/The-Art-of-Linear-Algebra-zh-CN.pdf at main kf-liu/The-Art-of-Linear-Algebra-zh-CN GitHubGraphic notes on Gilbert Strangs "Linear Algebra for Everyone", 线性代数的艺术中文版, 欢迎PR. - The-Ar…

R-CNN 模型算法流程梳理

目录 一、R-CNN整体流程 二、需要注意的地方 论文连接&#xff1a;[1311.2524] Rich feature hierarchies for accurate object detection and semantic segmentation 如果你之前了解过RNN&#xff0c;很容易混淆认为R-CNN也具有RNN的时序循环功能&#xff0c;这种理解是错误…

豪车车主因赖账被代驾举报酒驾 5元停车费引发风波

近日,浙江宁波一名兰博基尼车主酒后请代驾将车开到小区,随后自己开车进车库。由于不愿支付代驾小哥垫付的5元停车费,被对方举报酒驾。经检测,该车主血液中的酒精含量达59mg/100ml,达到酒驾标准。其驾驶证被扣12分,暂扣6个月,并被处以2000元以下罚款。代驾小哥石先生回忆…

儿童节前走失男孩遗体已找到 确认溺水身亡

6月2日晚,山东省滕州市公安局发布警情通报。5月31日22时35分许,滕州市公安局接到孔某某报警,称其外孙赵某某(10岁)于当日17时许离家后失联。接警后,公安机关迅速调阅监控、走访群众,并联合当地政府和社会救援力量,利用搜救警犬和无人机持续搜寻。6月2日15时许,在邻村一…

南昌政法委书记吴建平主动交代问题 正接受审查调查

江西省纪委监委6月3日发布消息,南昌市委常委、政法委书记吴建平涉嫌严重违纪违法,主动向组织交代问题,目前正接受江西省纪委监委纪律审查和监察调查。吴建平在江西省赣州市工作多年,曾担任上犹县委常委、副县长,于都县委常委、组织部长,定南县委副书记、县长等职务。2019…

女子多次持刀砍邻居家门 警方介入 疑似精神疾病患者

近日,辽宁大连有网友发视频称,疑似患有精神疾病的邻居多次持刀上门砍其家门。当事人刘女士向媒体透露,楼下邻居60多岁,自去年10月搬家入住后便反复上门“找事”。闹事女子声称刘女士一家是脑控组织,意图入侵她的大脑,并指责他们吵了她13年。然而,刘女士表示自己是外地人…

案例:TASK OA

案例&#xff1a;TASK OA 准备工作 jsx语法&底层渲染机制、函数组件&类组件、合成事件、webpack&脚手架…… server资料 axios配置 跨域配置 组件库介绍 多语言-中文包&#xff0c;汉化antd内部会自动按需导入&#xff0c;打包只会打包引入的&#xff1b;想用哪个组…

美机构民调:全球对中国好感度上升 美国评分跌入负区间

晨间咨询公司的最新民调数据显示,全球对中国的好感度持续上升,而对美国的好感度则跌入负区间值。美国的贸易政策似乎以牺牲自身利益为代价,助推了中国的崛起。美国声誉下滑正给自身带来经济损失。白宫政策导致外国游客数量减少,美元贬值。晨间咨询公司的政治情报主管麦克曼…

汽车生产模式正在发生什么样的变革 电动化与智能化重构生态

汽车生产模式正在发生什么样的变革 电动化与智能化重构生态。2025年第三届未来汽车先行者大会于5月31日在深圳召开,上汽集团总裁贾健旭在演讲中探讨了汽车产业的未来发展趋势。他指出,汽车行业正经历颠覆性变革,竞争已不再是传统对手之间的较量,而是被跨界者重新定义规则所…

重庆一女子打伤男子被立案,男子:我问她遛狗为何不牵绳,她打我耳光 取保候审引争议

重庆一女子打伤男子被立案,男子:我问她遛狗为何不牵绳,她打我耳光 取保候审引争议!重庆的刘先生反映,2月24日晚,他在小区质问两名女子遛狗为何不牵绳,结果被其中一名女子打成轻伤二级。刘先生报警后,警方拟刑事立案,但后来女子取保候审,这让刘先生难以接受。6月2日,…