【问题标题】:The Equivalent of indexof [duplicate]indexof的等价物
【发布时间】:2020-10-03 17:50:45
【问题描述】:

我正在尝试找出 indexof 的等价物来获取数组中特定元素的位置 golang 数组中整数的用途。

package main

import (
    "fmt"
)

func main() {
    fmt.Println("what")

    arr := []int{1, 2, 3, 4, 2, 2, 3, 5, 4, 4, 1, 6}

    i := IndexOf(2, arr)

}

【问题讨论】:

标签: go


【解决方案1】:

写一个函数。这是一个示例,假设 IndexOf 返回数字的第一个索引,如果没有找到则返回 -1。

// IndexOf returns the first index of needle in haystack
// or -1 if needle is not in haystack.
func IndexOf(haystack []int, needle int) int {
    for i, v := range haystack {
        if v == needle {
            return i
        }
    }
    return -1
}

Run this code on the Go Programming Language Playground.

【讨论】:

    【解决方案2】:

    在 go 中没有通用的库函数可以为您执行此操作。

    但是,如果您使用的是字节切片,则可以使用IndexByte(b []byte, c byte) int

    或者您可以编写一个快速函数来为您执行此操作:

    func indexOf(arr []int, val int) int {
        for pos, v := range arr {
            if v == val {
                return pos
            }
        }
        return -1
    }
    

    【讨论】:

      【解决方案3】:
      package main
      
      import "fmt"
      
      func IndexOf(arr []int, candidate int) int {
          for index, c := range arr {
              if c == candidate {
                  return index
              }
          }
          return -1
      }
      
      func main() {
          fmt.Println("what")
          arr := []int{1, 2, 3, 4, 2, 2, 3, 5, 4, 4, 1, 6}
          i := IndexOf(arr, 2)
          fmt.Println(i)
      }
      

      添加方法IndexOf进行搜索,这是一种线性搜索方法。

      参考:https://play.golang.org/p/Hp6Dg--XoIV

      【讨论】:

        【解决方案4】:

        在 Go 中没有 IndexOf 的等价物。你需要自己实现一个。但是如果你有排序的 Ints 数组,你可以使用sort.SearchInts,如下所示。

        package main
        
        import (
            "fmt"
            "sort"
        )
        
        func main() {
            fmt.Println(sort.SearchInts([]int{2,3,4,5,9,10,11}, 5))
        }
        

        同样来自 godoc:

        SearchInts 在已排序的整数切片中搜索 x 并返回 Search 指定的索引。如果 x 不存在,则返回值是插入 x 的索引(它可能是 len(a))。切片必须按升序排序。

        【讨论】:

        • 这仅在 arr 已排序时有效。在这种情况下,没有必要拨打sort.IntSlice(arr),如答案所示。因为问题中的切片没有排序,所以这个答案不适用于问题。
        • 很明显,从他的问题中可以明显看出,他要求一个通用函数来完成这项工作。此解决方案仅适用于排序切片。
        • 好吧,也许我不应该从上面的问题中举出例子。这更像是一个仅供参考的答案。我将编辑代码以避免混淆。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-08
        • 2017-08-24
        相关资源
        最近更新 更多