如何反转 go 中的切片?

2024-04-03

如何反转任意切片([]interface{})在 Go 中?我宁愿不必写Less and Swap to use sort.Reverse。有没有一种简单的内置方法可以做到这一点?


Use 切片.反转 https://pkg.go.dev/slices@master#Reverse在 Go 1.21 或更高版本中:

slices.Reverse(s)

Go 1.20 及更早版本的答案:

标准库没有用于反转切片的内置函数。使用 for 循环反转切片:

for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
    s[i], s[j] = s[j], s[i]
}

在 Go 1.18 或更高版本中使用类型参数编写通用反向函数:

func reverse[S ~[]E, E any](s S)  {
    for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
        s[i], s[j] = s[j], s[i]
    }
}

Use 反射交换器 https://pkg.go.dev/reflect#Swapper在 Go 1.8 或更高版本中编写一个可处理任意切片类型的函数:

func reverse(s interface{}) {
    n := reflect.ValueOf(s).Len()
    swap := reflect.Swapper(s)
    for i, j := 0, n-1; i < j; i, j = i+1, j-1 {
        swap(i, j)
    }
}

该答案中的函数就地反转切片。如果不想修改原始切片,复制切片 https://github.com/golang/go/wiki/SliceTricks#copy在翻转切片之前。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何反转 go 中的切片? 的相关文章

随机推荐

  • 环境变量名称如何反映 appsettings.json 的结构

    我正在使用 ASP NET Core 5 0 并且有一个 Web API 应用程序部署到内部云 其中很少有设置 例如 DB 是通过主机云上的环境变量进行控制的 在我的 Startup cs 中 我有以下代码 string projectDb
  • 如何在 Internet Explorer 中使用 Burp 拦截本地服务器 Web 请求

    我已经正确配置了Burp在代理位置拦截 127 0 0 1 9090 我的 Internet Explorer 代理设置如下 我还有一个名为 WebGoat 的网络服务器正在运行http localhost 8080 WebGoat htt
  • 手动将值插入 SQLite 数据库

    我是 Android 开发新手 刚刚开始学习用户界面开发的基础知识 在我的应用程序中 我有一个微调器 我想用数据库中的值填充微调器 因此 为了从数据库中获取值 数据库中必须有一些值 如何在不编写程序的情况下将值插入数据库 我可以用任何其他方
  • 如何使用 C 获取 Linux 中物理 CPU 的数量?

    我知道sysconf SC NPROCESSORS ONLN 会给我逻辑处理器的数量 但是我怎样才能获得物理处理器的数量呢 浩劫P 离线 cpu 不会显示在 proc cpuinfo 中 CPU 拓扑由 sys devices system
  • 如何在 HTML 视频元素的客户端坐标和图片坐标之间进行转换?

    假设我有一个视频元素 我想在其中处理鼠标事件 const v document querySelector video v onclick ev gt ev preventDefault console info x event offse
  • 如何使用java实现低通滤波器

    我正在尝试用 Java 实现低通滤波器 我的要求很简单 我必须消除超出特定频率 单维 的信号 看起来巴特沃斯滤波器可以满足我的需要 现在重要的是 CPU 时间应该尽可能低 过滤器必须处理近一百万个样本 而我们的用户不喜欢等待太久 是否有任何
  • Struts 2 和 Spring with EL - 打印变量有哪些不同类型[重复]

    这个问题在这里已经有答案了 显然我对 EL 特别是 Struts 2 还很陌生 我正在更新当前的代码 并且看到不同类型的条目 有什么不同
  • 特定的 PNG 压缩类型是否与 macOS Cocoa 应用程序不兼容?

    我们最近遇到了一些资产图像的问题 其中 Retina 2x版本正在非 Retina 设备上使用 存在资源的 Retina 和非 Retina 版本 我们已经将问题归结为压缩 因此我们现在可以避免它 但如果有人有其他见解 我很想听听他们的意见
  • 如何使用外部java库在命令行中编译和运行kotlin程序

    我是第一次尝试 kotlin 我能够在命令行上在 kotlin 中运行编译 hello world 程序 但无法编译我想要包含外部 java 库的程序 import com google gson Gson data class Perso
  • 使用 Rich Preview 元标记作为图像 html css

    当您通过文本 Facebook 消息或任何主流消息客户端发送链接时 您会注意到它会生成 丰富的预览 这基本上是您链接的网站弹出的图像 我了解如何设置此属性 例如
  • Gulp-sass 无法编译 scss 文件

    我正在使用 Gulp 将我的 sass 编译为 css 一个简单的任务编译style scss文件在 sass目录并将输出保存到项目的根目录中 style scss仅用于导入其他文件 sass目录 当我从命令行运行默认任务时 gulp 我收
  • 如何模糊除 2 个节点之外的所有内容。雪碧 (Swift)

    我想模糊我的游戏背景 self view scene paused true 但是按钮和暂停的标签 都是 SKSpriteNode 的 不应该是模糊的 它们都有不同的 Z index 值 按下按钮节点时场景暂停 再次按下按钮时场景恢复 我找
  • 通过 YouTube 数据 API 确定视频编解码器?

    是否可以通过 YouTube 数据 API 确定特定的 YouTube 视频是使用 H 264 还是 FLV 编码 如果是这样 怎么办 我可以开始文件下载并检查视频流的编码方式 当然 以编程方式 但我想使用 YouTube 数据 API 来
  • 正则表达式在字符串中查找数字

    我有一个字符串 可能包含也可能不包含 4 或 5 位数字 我正在寻找一个正则表达式 可以检测字符串是否确实有这样的数字 避免较长数字的万无一失的方法是 d d 4 5 d 我假设您不想在千位数字后面留有逗号 如果你这样做的话 d d 1 2
  • Symfony - 以生成的形式添加文本

    我想做一些非常简单的事情 但我不知道如何管理它 我有一个表格 form start form form widget form form end form 其中有几个文本字段 我想 插入 一些文本 例如 p my Text p 在两个文本字
  • lex :如何覆盖 YY_BUF_SIZE

    根据manual http westes github io flex manual The Default Memory Management html YY BUF SIZE is 16K我们需要重写它 但是 手册没有指定如何覆盖它 我
  • Tar:创建除一个之外的存档排除目录

    我有一些目录和一些文件 dir archive somedir1 dir archive somedir2 dir archive somedir3 dir archive mydir dir archive mydir excludedi
  • 在控制台中检测 Ctrl + S

    I m developing a console application in which I need to detect several hotkeys such as Ctrl N Ctrl O and Ctrl S Here s a
  • 如何在Excel中无法以图形方式显示的外部数据查询中添加参数?

    我经常使用 MS ExcelGet External Data创建简单的报告 对数据库运行查询并在 Excel 中很好地显示 Excel 的强大功能 例如过滤和数据透视表 以及用户熟悉的界面使其非常适合此目的 但是 Microsoft Qu
  • 如何反转 go 中的切片?

    如何反转任意切片 interface 在 Go 中 我宁愿不必写Less and Swap to use sort Reverse 有没有一种简单的内置方法可以做到这一点 Use 切片 反转 https pkg go dev slices