当前位置: 首页 > 面试题库 >

如何(简洁地)从Go中的切片中删除第一个元素?

郝修为
2023-03-14
问题内容

我在Go中建立了一个简单的队列。它使用内部切片来跟踪其元素。通过附加到切片将元素推入队列。我想.Pop()通过删除中的第一个元素来实现elements

在许多其他语言中,“弹出”列表的第一个元素是一个单行,这使我相信下面的实现是草率而冗长的。有没有更好的办法?

type Queue struct {
    elements []interface{}
}

func (queue *Queue) Push(element interface{}) {
    queue.elements = append(queue.elements, element)
}

func (queue *Queue) Pop() interface{} {
    element := queue.elements[0]
    if len(queue.elements) > 1 {
        queue.elements = queue.elements[1:]
    } else {
        queue.elements = make([]interface{}, 0)
    }
    return element
}

请注意,Queue如果,我会感到恐慌len(queue.elements) == 0。我不检查界限不是疏忽大意。


问题答案:

你尝试过这些吗?

从队列弹出

x, a = a[0], a[1:]

从堆栈弹出

x, a = a[len(a)-1], a[:len(a)-1]

a = append(a, x)

来自:https :
//code.google.com/p/go-wiki/wiki/SliceTricks



 类似资料:
  • 我在Go中构建了一个简单的队列。它使用内部切片来跟踪其元素。元素通过附加到切片而被推送到队列中。我想实现。 在许多其他语言中,“弹出”列表的第一个元素是一行,这使我相信下面的实现是草率和冗长的。有更好的办法吗? 请注意,如果

  • 主要内容:从开头位置删除,从中间位置删除,从尾部删除Go语言并没有对删除切片元素提供专用的语法或者接口,需要使用切片本身的特性来删除元素,根据要删除元素的位置有三种情况,分别是从开头位置删除、从中间位置删除和从尾部删除,其中删除切片尾部的元素速度最快。 从开头位置删除 删除开头的元素可以直接移动数据指针: 也可以不移动数据指针,但是将后面的数据向开头移动,可以用 append 原地完成(所谓原地完成是指在原有的切片数据对应的内存区间内完成,不会导致

  • 我正在使用这个命令从切片中删除一个元素,但它不起作用,请建议。

  • 问题内容: 这个带有添加功能的删除技巧如何工作? 似乎它正在抓取第一个元素(空数组)之前的所有内容 然后将所有内容附加在第一个元素之后(位置零) …(点对点)有什么作用? 问题答案: 切片在哪里,是要删除的元素的索引: 是Go中可变参数的语法。 基本上,在 定义 函数时,它将把您传递的所有参数放入该类型的一个切片中。这样,您可以传递任意数量的参数(例如,可以传递任意数量的参数)。 现在,当 调用

  • 问题内容: 我进行了以下测试,即打印原始输入切片(过滤后),而没有删除元素,但是最后有一个额外的元素,使输入切片具有相同的长度,即使过滤后应该较短。 我已经看过这篇文档https://github.com/golang/go/wiki/SliceTricks#delete 但是我认为我缺少有关Go的一些技巧,因为似乎我使用的切片方法错误。 如何避免出现“输出片段”?(以正确的方式打印,包含正确的元

  • 问题内容: 我已经看过这篇文章: Python:通过删除每个第n个元素从现有列表构建新列表,但是由于某些原因,它对我不起作用: 我这样尝试: 此函数需要一个列表和。然后,它使用列表中的n步删除第n个元素,并打印结果。 这是我的函数调用: 错误的输出: 代替 然后我从上面的链接尝试了一个变体: 再次,函数调用: 给了我同样的错误的结果: 不是 如何正确地从列表中删除/删除/删除 第n个 项目? 问题