【问题标题】:如何限制 Go 中结构体循环的次数? [关闭]
【发布时间】:2022-01-22 05:08:18
【问题描述】:

我试图让Struct 在停止之前只循环十次。我的Struct 看起来像

type Book struct {
    Id string
    Title string
}

循环遍历整个事情的代码是

var books []Book;
for _, book := range books {
    fmt.Println(book.Id + " " + book.Title);
}

我尝试使用单独的 for 循环,该循环将执行 10 次,但它只循环了整个 Struct 十次或执行了 Struct 的一部分十次。

【问题讨论】:

  • 呈现的代码会循环遍历books中的所有值,所以如果有10本书,它将循环10次。请创建一个minimal reproducible example,准确显示您要解决的问题。
  • 结构中目前有 17 项。如果不基本上将整个程序粘贴进去,我就无法重新创建示例。
  • 结构中的字段数与循环一系列这些结构值无关。 “最小可重现示例”并不意味着您的代码的精确副本,只是解释问题所需的最小部分。
  • 我认为问题出在术语上。在该示例中,没有迭代 struct,但迭代了 structs 的一部分。我可以想象 OP 想要限制要迭代的切片中的元素数量;可能只考虑切片的 N 个第一个元素来限制迭代。
  • 如果我没记错的话,最简单的就是使用subslicing:for b := range books[:10] { ...

标签: loops for-loop go struct for-range


【解决方案1】:

正如 Jim 在 cmets 部分中提到的,您正在遍历之前在线声明的所有书籍,顺便说一句,这是一个空切片(因此您根本不会循环)。

虽然在一个范围内的 for 循环中,第一个参数是当前元素的索引。有了,您可以修复循环中的条件以在超出任意限制时退出它

// books is a slice of Book -> []Book
for i, book := range books {
    // If you are on the eleventh element of your slice
    if i == 10 {
        // leave the loop
        break
    }
// Do whatever you want with book
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-13
    • 2019-05-21
    相关资源
    最近更新 更多