猿问

匿名函数返回结果的意义何在?

这是我在网上找到的示例代码。


func FindBestKElements(nums []int, k int) []int {

    h := &IntHeap{}

    for _, val := range nums { // O(N)

        heap.Push(h, val) // O(log K)

        if h.Len() > k {

            heap.Pop(h) // O(log K)

        }

    }


    return func() []int { // O (k log k)

        result := make([]int, h.Len())

        initialLen := h.Len()

        for i := initialLen; i > 0; i-- {

            result[i-1] = heap.Pop(h).(int)

        }

        return result

    }()

}

该函数的 return 语句返回运行匿名函数的结果。我不确定这样做会给你带来什么好处。


例如,为什么我们不能像下面这样编写上述方法?


func FindBestKElements(nums []int, k int) []int {

    h := &IntHeap{}

    for _, val := range nums { // O(N)

        heap.Push(h, val) // O(log K)

        if h.Len() > k {

            heap.Pop(h) // O(log K)

        }

    }


    result := make([]int, h.Len())

    initialLen := h.Len()

    for i := initialLen; i > 0; i-- {

        result[i-1] = heap.Pop(h).(int)

    }

    return result

}


慕尼黑8549860
浏览 77回答 1
1回答

白猪掌柜的

在给定的示例中,它似乎是多余的。但是,在某些情况下,它可能是有用的。举个例子:package mainfunc main() {   a := []int{10, 20, 30, 40}   var b bool   for _, n := range a {      if n == 20 { b = true }   }   if b {      println("pass")   } else {      println("fail")   }}您可以使用另一个函数来代替状态变量:bpackage mainfunc main() {   a := []int{10, 20, 30, 40}   if func() bool {      for _, n := range a {         if n == 20 { return true }      }      return false   }() {      println("pass")   } else {      println("fail")   }}
随时随地看视频慕课网APP

相关分类

Go
我要回答