go lo-slice使用示例
使用例子 包含了以下几个主要部分基本切片操作Filter- 过滤切片元素Map- 转换切片元素Reduce- 归约切片元素ForEach- 遍历切片元素切片转换操作SliceToMap- 将切片转换为映射KeyBy- 按键分组FilterMap- 过滤并转换FlatMap- 扁平化转换切片处理操作Uniq- 去重UniqBy- 按条件去重GroupBy- 分组Chunk- 分块PartitionBy- 分区切片修改操作Drop- 从开头删除元素DropRight- 从结尾删除元素Take- 取前几个元素TakeWhile- 条件取元素Replace- 替换元素ReplaceAll- 替换所有元素其他实用功能Count- 计数CountBy- 按条件计数CountValues- 计数值Compact- 移除零值IsSorted- 检查是否排序IsSortedBy- 按条件检查是否排序Subset- 取子集Splice- 插入元素高级切片操作Concat- 连接切片Window- 滑动窗口Sliding- 自定义滑动窗口Interleave- 交错切片Trim- 修剪切片Cut- 切割切片每个测试函数都包含了详细的注释和使用示例展示了如何使用这些函数来处理切片数据。您可以通过运行这个测试文件来查看各种操作的输出结果从而更好地理解这些函数的用法。package webtestimport (fmttestinggithub.com/samber/logithub.com/stretchr/testify/suite)// TestSliceSuite 测试 lo 包中的切片操作type TestSliceSuite struct {suite.Suite}func (self *TestSliceSuite) SetupSuite() {}func (self *TestSliceSuite) SetupTest() {}func TestSliceSuites(t *testing.T) {suite.Run(t, new(TestSliceSuite))}// 基本切片操作func (self *TestSliceSuite) Test001_BasicSliceOperations() {// 准备测试数据numbers : []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}users : []struct {ID intName stringAge int}{{1, Alice, 25},{2, Bob, 30},{3, Charlie, 20},{4, David, 35},{5, Eve, 28},}// Filter - 过滤切片元素evenNumbers : lo.Filter(numbers, func(item int, index int) bool {return item%2 0})fmt.Println(Even numbers:, evenNumbers) // [2 4 6 8 10]// Map - 转换切片元素names : lo.Map(users, func(item struct {ID intName stringAge int}, index int) string {return item.Name})fmt.Println(Names:, names) // [Alice Bob Charlie David Eve]// Reduce - 归约切片元素sum : lo.Reduce(numbers, func(agg int, item int, index int) int {return agg item}, 0)fmt.Println(Sum:, sum) // 55// ForEach - 遍历切片元素fmt.Println(ForEach:)lo.ForEach(users, func(item struct {ID intName stringAge int}, index int) {fmt.Printf(User %d: %s, %d years old\n, item.ID, item.Name, item.Age)})}// 切片转换操作func (self *TestSliceSuite) Test002_SliceTransformations() {// 准备测试数据users : []struct {ID intName stringAge int}{{1, Alice, 25},{2, Bob, 30},{3, Charlie, 20},{4, David, 35},{5, Eve, 28},}// SliceToMap - 将切片转换为映射userMap : lo.SliceToMap(users, func(item struct {ID intName stringAge int}) (int, string) {return item.ID, item.Name})fmt.Println(User map:, userMap) // map[1:Alice 2:Bob 3:Charlie 4:David 5:Eve]// KeyBy - 按键分组userByAge : lo.KeyBy(users, func(item struct {ID intName stringAge int}) int {return item.Age})fmt.Println(User by age:, userByAge)// FilterMap - 过滤并转换adultNames : lo.FilterMap(users, func(item struct {ID intName stringAge int}, index int) (string, bool) {return item.Name, item.Age 25})fmt.Println(Adult names:, adultNames) // [Alice Bob David Eve]// FlatMap - 扁平化转换nested : [][]int{{1, 2}, {3, 4}, {5, 6}}flattened : lo.FlatMap(nested, func(item []int, index int) []int {return item})fmt.Println(Flattened:, flattened) // [1 2 3 4 5 6]}// 切片处理操作func (self *TestSliceSuite) Test003_SliceProcessing() {// 准备测试数据numbers : []int{1, 2, 2, 3, 3, 3, 4, 4, 4, 4}users : []struct {ID intName stringAge int}{{1, Alice, 25},{2, Bob, 30},{3, Charlie, 20},{4, David, 35},{5, Eve, 25},}// Uniq - 去重uniqueNumbers : lo.Uniq(numbers)fmt.Println(Unique numbers:, uniqueNumbers) // [1 2 3 4]// UniqBy - 按条件去重uniqueByAge : lo.UniqBy(users, func(item struct {ID intName stringAge int}) int {return item.Age})fmt.Println(Unique by age:, uniqueByAge)// GroupBy - 分组groupedByAge : lo.GroupBy(users, func(item struct {ID intName stringAge int}) int {return item.Age})fmt.Println(Grouped by age:, groupedByAge)// Chunk - 分块chunks : lo.Chunk(numbers, 3)fmt.Println(Chunks:, chunks) // [[1 2 2] [3 3 3] [4 4 4] [4]]// PartitionBy - 分区partitionedByAge : lo.PartitionBy(users, func(item struct {ID intName stringAge int}) string {if item.Age 25 {return young} else if item.Age 30 {return adult} else {return senior}})fmt.Println(Partitioned by age:, partitionedByAge)}// 切片修改操作func (self *TestSliceSuite) Test004_SliceModifications() {// 准备测试数据numbers : []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}// Drop - 从开头删除元素dropped : lo.Drop(numbers, 3)fmt.Println(Dropped first 3:, dropped) // [4 5 6 7 8 9 10]// DropRight - 从结尾删除元素droppedRight : lo.DropRight(numbers, 3)fmt.Println(Dropped last 3:, droppedRight) // [1 2 3 4 5 6 7]// Take - 取前几个元素taken : lo.Take(numbers, 5)fmt.Println(Taken first 5:, taken) // [1 2 3 4 5]// TakeWhile - 条件取元素takenWhile : lo.TakeWhile(numbers, func(item int) bool {return item 5})fmt.Println(Taken while 5:, takenWhile) // [1 2 3 4]// Replace - 替换元素replaced : lo.Replace(numbers, 5, 100, 1)fmt.Println(Replaced first 5 with 100:, replaced) // [1 2 3 4 100 6 7 8 9 10]// ReplaceAll - 替换所有元素replacedAll : lo.ReplaceAll([]int{1, 2, 2, 3, 2}, 2, 99)fmt.Println(Replaced all 2 with 99:, replacedAll) // [1 99 99 3 99]}// 其他实用功能func (self *TestSliceSuite) Test005_OtherUsefulFunctions() {// 准备测试数据numbers : []int{1, 2, 3, 4, 5, 2, 3, 4, 2}mixed : []int{0, 1, 0, 2, 0, 3, 0, 4}sorted : []int{1, 2, 3, 4, 5}unsorted : []int{3, 1, 4, 2, 5}// Count - 计数count2 : lo.Count(numbers, 2)fmt.Println(Count of 2:, count2) // 3// CountBy - 按条件计数countEven : lo.CountBy(numbers, func(item int) bool {return item%2 0})fmt.Println(Count of even numbers:, countEven) // 6// CountValues - 计数值valueCounts : lo.CountValues(numbers)fmt.Println(Value counts:, valueCounts) // map[1:1 2:3 3:2 4:2 5:1]// Compact - 移除零值compacted : lo.Compact(mixed)fmt.Println(Compacted:, compacted) // [1 2 3 4]// IsSorted - 检查是否排序isSorted : lo.IsSorted(sorted)fmt.Println(Is sorted:, isSorted) // trueisUnsorted : lo.IsSorted(unsorted)fmt.Println(Is unsorted:, isUnsorted) // false// IsSortedBy - 按条件检查是否排序users : []struct {ID intName stringAge int}{{1, Alice, 20},{2, Bob, 25},{3, Charlie, 30},}isSortedByAge : lo.IsSortedBy(users, func(item struct {ID intName stringAge int}) int {return item.Age})fmt.Println(Is sorted by age:, isSortedByAge) // true// Subset - 取子集subset : lo.Subset(numbers, 2, 4)fmt.Println(Subset from index 2, length 4:, subset) // [3 4 5 2]// Splice - 插入元素spliced : lo.Splice(numbers, 2, 100, 200)fmt.Println(Spliced at index 2:, spliced)}// 高级切片操作func (self *TestSliceSuite) Test006_AdvancedSliceOperations() {// 准备测试数据numbers1 : []int{1, 2, 3}numbers2 : []int{4, 5, 6}numbers3 : []int{7, 8, 9}// Concat - 连接切片concatenated : lo.Concat(numbers1, numbers2, numbers3)fmt.Println(Concatenated:, concatenated) // [1 2 3 4 5 6 7 8 9]// Window - 滑动窗口windowed : lo.Window(concatenated, 3)fmt.Println(Window size 3:, windowed) // [[1 2 3] [2 3 4] [3 4 5] [4 5 6] [5 6 7] [6 7 8] [7 8 9]]// Sliding - 自定义滑动窗口sliding : lo.Sliding(concatenated, 3, 2)fmt.Println(Sliding window size 3, step 2:, sliding) // [[1 2 3] [3 4 5] [5 6 7] [7 8 9]]// Interleave - 交错切片interleaved : lo.Interleave(numbers1, numbers2, numbers3)fmt.Println(Interleaved:, interleaved) // [1 4 7 2 5 8 3 6 9]// Trim - 修剪切片toTrim : []int{0, 0, 1, 2, 3, 0, 0}trimmed : lo.Trim(toTrim, []int{0})fmt.Println(Trimmed:, trimmed) // [1 2 3]// Cut - 切割切片toCut : []int{1, 2, 3, 4, 5, 6}before, after, found : lo.Cut(toCut, []int{3, 4})fmt.Println(Cut before:, before) // [1 2]fmt.Println(Cut after:, after) // [5 6]fmt.Println(Cut found:, found) // true}

相关新闻

Flutter 三方库 steel_crypt 的鸿蒙化适配指南 - 掌控加密算法资产、精密安全治理实战、鸿蒙级防护专家

Flutter 三方库 steel_crypt 的鸿蒙化适配指南 - 掌控加密算法资产、精密安全治理实战、鸿蒙级防护专家

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net Flutter 三方库 steel_crypt 的鸿蒙化适配指南 - 掌控加密算法资产、精密安全治理实战、鸿蒙级防护专家 在鸿蒙跨平台应用执行高级安全管理与多维加密算法资产指控(如构建一个支…

2026/5/17 9:30:19 阅读更多 →
利用AI写专著,这些工具你不能错过!快速完成学术专著

利用AI写专著,这些工具你不能错过!快速完成学术专著

学术专著的写作,不仅是对一个人学术能力的严格考验,也是一种心理承受力的挑战。与团队合作的论文写作不同,专著的创作大多是独立进行的。从选题、构建框架到撰写内容、进行修改,几乎每一个环节都需要研究者自己完成。长期的单独创…

2026/7/3 2:36:08 阅读更多 →
Java开发公司AI转型破局:JBoltAI的赋能与革新

Java开发公司AI转型破局:JBoltAI的赋能与革新

在大模型技术全面渗透产业的当下,企业级软件开发的智能化转型已成必然趋势。Java 作为长期占据企业级开发主流的技术栈,凭借跨平台性、稳定性和成熟生态,广泛应用于金融、制造、能源等核心领域,但传统 Java 开发模式也正面临着智能…

2026/7/6 2:09:04 阅读更多 →

最新新闻

RHEL 5/6 与 CentOS 7/8 镜像:4种方案构建本地YUM源实战

RHEL 5/6 与 CentOS 7/8 镜像:4种方案构建本地YUM源实战

企业级Linux环境下的本地YUM源构建全攻略在无法访问外网或网络受限的企业环境中,运维工程师经常面临软件包依赖管理和系统更新的挑战。本文将深入探讨四种基于RHEL/CentOS ISO镜像构建本地YUM源的实用方案,帮助您建立稳定高效的离线软件仓库。1. 准备工作…

2026/7/6 12:10:50 阅读更多 →
【Bug已解决】Codex Chrome 扩展显示未连接的解决方案

【Bug已解决】Codex Chrome 扩展显示未连接的解决方案

【Bug已解决】Codex Chrome 扩展显示未连接的解决方案 1. 问题描述 安装了 Codex 官方提供的 Chrome 浏览器扩展后,扩展图标本应显示"已连接"状态,方便 Codex 直接操作浏览器页面,但实际使用时却发现扩展一直显示未连接&#xff1a…

2026/7/6 12:10:50 阅读更多 →
Linux 后台进程管理实战:nohup  与 jobs/fg/bg/kill 的 4 种组合用法

Linux 后台进程管理实战:nohup 与 jobs/fg/bg/kill 的 4 种组合用法

Linux 后台进程管理实战:nohup 与 jobs/fg/bg/kill 的 4 种组合用法在 Linux 系统中,后台进程管理是每个开发者必须掌握的技能。无论是运行长时间任务还是处理突发需求,灵活运用 nohup 结合 jobs、fg、bg、kill 等命令,能显著提升…

2026/7/6 12:08:48 阅读更多 →
OpenCV 自定义 LUT 实现伪彩色:从256x3数组到多光谱图像合成实战

OpenCV 自定义 LUT 实现伪彩色:从256x3数组到多光谱图像合成实战

OpenCV 自定义 LUT 实现伪彩色:从256x3数组到多光谱图像合成实战第一次看到NASA发布的蟹状星云图像时,我被那些绚丽的色彩震撼了。但后来才知道,这些看似真实的宇宙色彩,实际上是通过X射线、红外线和可见光等多光谱数据合成的伪彩…

2026/7/6 12:06:46 阅读更多 →
glibc 2.31 源码升级风险规避:3个关键备份与回滚策略(附CentOS 7实测)

glibc 2.31 源码升级风险规避:3个关键备份与回滚策略(附CentOS 7实测)

glibc 2.31 源码升级风险规避:3个关键备份与回滚策略(附CentOS 7实测)在Linux系统中,glibc作为核心C库,其升级操作堪称"心脏手术"——任何失误都可能导致系统瘫痪。当Python模块报错GLIBC_2.25 not found时&…

2026/7/6 12:02:44 阅读更多 →
MacBook Pro M3 系列外接 4K 显示器 5 个关键设置:从 HiDPI 到色彩匹配

MacBook Pro M3 系列外接 4K 显示器 5 个关键设置:从 HiDPI 到色彩匹配

MacBook Pro M3 系列外接 4K 显示器的专业调校指南 对于设计师、视频剪辑师和程序员等专业用户来说,MacBook Pro M3 系列搭配高分辨率显示器可以大幅提升工作效率和视觉体验。但要让这套组合发挥最大潜力,仅完成基础连接是远远不够的。本文将深入解析五…

2026/7/6 12:02:44 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻