loops - slice 范围的循环索引

标签 loops go slice indices

我有一个相当简单的问题,但无法在任何地方找到答案。我正在遍历一系列 slice ,如下所示:

for index, arg := range os.Args[1:] {
    s += fmt.Sprintf("%d: %s", index, arg)
}

据我所知,range 遍历一个 slice ,而 index 是从 range 创建的,它是从零开始的。我得到输出:

0: argument_1
1: argument_2
// etc.

但这不是我所期望的 - 我需要 range 来保留该 slice 的索引,所以我的输出如下所示:

1: argument_1
2: argument_2
// etc.

最明显的实现方法是在循环中的索引上添加 shift:

shift := 1
for index, arg := range os.Args[shift:] {
    index += shift
    s += fmt.Sprintf("%d: %s", index, arg)
}

但我想知道,是否有更多“Go-ish”方式来做到这一点,以及如何在像这样在 Go 中创建 slice 时保留索引?

最佳答案

您的原始代码没有任何问题,当您执行 os.Args[1:] 时,您正在创建一个新 slice ,就像任何 slice 一样从索引 0 开始。
这是风格(和性能)的问题,但您也可以这样做:

for index, arg := range os.Args {
    if index < 1 {
        continue
    }
    s += fmt.Sprintf("%d: %s", index, arg)
}

关于loops - slice 范围的循环索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41445216/

相关文章:

php - 仅当数据库中不存在数据时才插入

java - 'continue' 关键字的替代项

go - 类型开关以通过接口(interface)验证功能

go - 使用 operator-framework 负载平衡 K8s Pod

security - 调用“unsafe.Pointer(&x)”不安全吗?

rust - 如何惯用地复制切片?

java - 重置循环中的变量

c - 为什么我的C程序即使满足退出条件也不跳出while循环

Python:是否可以有一个类方法作用于类的一部分?

python - 按名称列表对 Pandas 中的多个列进行切片