dsjbest2014 2018-01-21 17:14
浏览 49
已采纳

尝试使用append删除字符串数组中的连续项

I have trouble understanding the following result. I am expecting the code

package main
import "fmt"

func main() {
    fruits := []string{"apple", "banana", "orange", "kiwi", "ananas"}
    for i, _ := range fruits {
        s := append(fruits[:i], fruits[i+1:]...)
        fmt.Println(s)
    }
}

to return :

[banana orange kiwi ananas]
[apple orange kiwi ananas]
[apple banana kiwi ananas]
[apple banana orange ananas]
[apple banana orange kiwi]

instead it returns :

[banana orange kiwi ananas]
[banana kiwi ananas ananas]
[banana kiwi ananas ananas]
[banana kiwi ananas ananas]
[banana kiwi ananas ananas]

what am i missing? Note: I am note looking for code that returns the expected behavior, just trying to understand what the code does. Playground : https://play.golang.org/p/CB73GYvY7aW

  • 写回答

1条回答 默认 最新

  • doormen2014 2018-01-21 17:34
    关注

    As the spec say:

    The append built-in function appends elements to the end of a slice. If it has sufficient capacity, the destination is resliced to accommodate the new elements. If it does not, a new underlying array will be allocated. Append returns the updated slice.

    In your case, the underlying slice is always sufficient, so it modifies it every time. The result is expectable according to the spec.

    The s/fruit of each loop:

    [banana orange kiwi ananas] [banana orange kiwi ananas ananas]
    [banana kiwi ananas ananas] [banana kiwi ananas ananas ananas]
    [banana kiwi ananas ananas] [banana kiwi ananas ananas ananas]
    [banana kiwi ananas ananas] [banana kiwi ananas ananas ananas]
    [banana kiwi ananas ananas] [banana kiwi ananas ananas ananas]
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 c语言,请帮蒟蒻看一个题
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)