Go+ 集合 Collection 教程(4.3)

举报
liuzhen007 发表于 2022/02/20 12:52:38 2022/02/20
【摘要】 ​目录Go+ 概述集合 CollectionIndex 方法Include 方法Any 方法All 方法Filter 方法Go+ 概述Go+ 是一门融合工程开发的 Go、数据科学领域的 Python、编程教学领域的 Scratch,以 Python 之形结合 Go 之心,让工程师处理数据不需要学习新的开发语言,让初学者学习编程、开发作品的门槛更低的编程语言。集合 Collection有时候,...

目录

Go+ 概述

集合 Collection

Index 方法

Include 方法

Any 方法

All 方法

Filter 方法


Go+ 概述

Go+ 是一门融合工程开发的 Go、数据科学领域的 Python、编程教学领域的 Scratch,以 Python 之形结合 Go 之心,让工程师处理数据不需要学习新的开发语言,让初学者学习编程、开发作品的门槛更低的编程语言。

集合 Collection

有时候,我们会经常需要对数据集合 collection 进行操作,比如选择满符合某种条件的条目项,或者使用自定义函数把条目项映射到新的集合中去。

在大多数语言中,我们习惯使用通用的数据结构和算法。但是 Go+ 不支持泛型;在 Go+ 中,也可以提供了一些程序和数据类型需要的集合方法。

接下来,我们介绍一些集合方法的使用实例。

Index 方法

作用:返回目标串在字符串数组中的位置,如果没有找到返回 -1。

示例代码如下:

func Index(vs []string, t string) int {
    for i, v := range vs {
        if v == t {
            return i
        }
    }
    return -1
}

arr := ["a", "hello", "world", "b", "good", "x", "zZ", "A"]

println("字符串数组:", arr)

println("hello 在字符串数组中的位置:", Index(arr, "hello"))

执行结果如下:

字符串数组: [a hello world b good x zZ A]
hello 在字符串数组中的位置: 1

运行结果截图如下:

也可以自己尝试:请点我! 

Include 方法

作用:判断目标串是不是包含在切片中,存在返回 true,否则返回 false。

示例代码如下:

func Index(vs []string, t string) int {
    for i, v := range vs {
        if v == t {
            return i
        }
    }
    return -1
}

	
func Include(vs []string, t string) bool {
    return Index(vs, t) >= 0
}

arr := ["a", "hello", "world", "b", "good", "x", "zZ", "A"]

println("字符串数组:", arr)

println("目标串 hello 是否包含在字符串切片中:", Include(arr, "hello"))


执行结果如下:

字符串数组: [a hello world b good x zZ A]
目标串 hello 是否包含在字符串切片中: true

也可以自己尝试:请点我!

Any 方法

作用:如果切片中的一个字符串满足条件,则返回 true,否则返回 false。

示例代码如下:

import (
    "strings"
)
func Any(vs []string, f func(string) bool) bool {
    for _, v := range vs {
        if f(v) {
            return true
        }
    }
    return false
}
arr := ["a", "hello", "world", "b", "good", "x", "zZ", "A"]

println("字符串数组:", arr)

println("字符串切片中是否存在 w 前缀:", Any(arr, func(v string) bool {
        return strings.HasPrefix(v, "w")
    }))

执行结果如下:

字符串数组: [a hello world b good x zZ A]
字符串切片中是否存在 w 前缀: true

也可以自己尝试:请点我!

All 方法

作用:切片中所有元素都满足特定的条件,则返回 true,否则返回 false。

示例代码如下:

import (
    "strings"
)
func All(vs []string, f func(string) bool) bool {
    for _, v := range vs {
        if !f(v) {
            return false
        }
    }
    return true
}
arr := ["a", "hello", "world", "b", "good", "x", "zZ", "A"]

println("字符串数组:", arr)

println("字符串切片中所有元素都存在 w 前缀:", All(arr, func(v string) bool {
        return strings.HasPrefix(v, "w")
    }))

执行结果如下:

字符串数组: [a hello world b good x zZ A]
字符串切片中所有元素都存在 w 前缀: false

也可以自己尝试:请点我!

Filter 方法

作用:返回切片中所有元素都满足特定的条件的新切片。

示例代码如下:

import (
    "strings"
)
func Filter(vs []string, f func(string) bool) []string {
    vsf := make([]string, 0)
    for _, v := range vs {
        if f(v) {
            vsf = append(vsf, v)
        }
    }
    return vsf
}
arr := ["a", "hello", "world", "b", "good", "x", "zZ", "A"]

println("字符串切片:", arr)

println("字符串切片中所有元素都存在 0 的新切片:", Filter(arr, func(v string) bool {
        return strings.Contains(v, "o")
    }))

执行结果如下:

字符串切片: [a hello world b good x zZ A]
字符串切片中所有元素都存在 0 的新切片: [hello world good]

也可以自己尝试:请点我! 


作者简介:😄大家好,我是 Data-Mining(liuzhen007),是一位典型的音视频技术爱好者,前后就职于传统广电巨头和音视频互联网公司,具有丰富的音视频直播和点播相关经验,对 WebRTC、FFmpeg 和 Electron 有非常深入的了解,😄公众号:玩转音视频。同时也是 CSDN 博客专家、华为云享专家(共创编辑)、InfoQ 签约作者,欢迎关注我分享更多干货!😄

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。