Arrays 函数是否可以更改在别处声明的字符串数组片段的大小?戈兰

Arrays 函数是否可以更改在别处声明的字符串数组片段的大小?戈兰,arrays,go,pass-by-reference,slice,Arrays,Go,Pass By Reference,Slice,我想从切片中删除一个元素。但当我这样做时,我最终在底层数组中生成了两个空元素。 我已经搜索过了 主程序包 输入“fmt” //字符串从字符串数组中删除相邻的重复项 func rmDup(str[]字符串)[]字符串{ 对于i:=1;i

我想从切片中删除一个元素。但当我这样做时,我最终在底层数组中生成了两个空元素。 我已经搜索过了

主程序包
输入“fmt”
//字符串从字符串数组中删除相邻的重复项
func rmDup(str[]字符串)[]字符串{
对于i:=1;i
main中的str是否可以返回rmDup()中定义的大小和容量

main
中的
str
是否有任何方法可以返回大小和容量 在
rmDup()
中定义

比如说,

package main

import "fmt"

//String remove adjacent duplicates from a string array
func rmDup(str []string) []string {
    for i := 1; i < len(str); i++ {
        if str[i] == str[i-1] {
            copy(str[i:], str[i+1:])
            str[len(str)-1] = ""
            str = str[:len(str)-1]
        }
    }
    return str
}

func main() {
    str := []string{"dog", "cat", "cat", "mouse", "mouse", "zebra", "zebra"}
    fmt.Println(len(str), cap(str), str)
    str = rmDup(str)
    fmt.Println(len(str), cap(str), str)
}
package main

import "fmt"

//String remove adjacent duplicates from a string array
func rmDup(str *[]string) {
    s := *str
    for i := 1; i < len(s); i++ {
        if s[i] == s[i-1] {
            copy(s[i:], s[i+1:])
            s[len(s)-1] = ""
            s = s[:len(s)-1]
        }
    }
    *str = s
}

func main() {
    str := []string{"dog", "cat", "cat", "mouse", "mouse", "zebra", "zebra"}
    fmt.Println(len(str), cap(str), str)
    rmDup(&str)
    fmt.Println(len(str), cap(str), str)
}

我的意思是在不必返回函数
rmDup()
的情况下就地执行 什么都行

比如说,

package main

import "fmt"

//String remove adjacent duplicates from a string array
func rmDup(str []string) []string {
    for i := 1; i < len(str); i++ {
        if str[i] == str[i-1] {
            copy(str[i:], str[i+1:])
            str[len(str)-1] = ""
            str = str[:len(str)-1]
        }
    }
    return str
}

func main() {
    str := []string{"dog", "cat", "cat", "mouse", "mouse", "zebra", "zebra"}
    fmt.Println(len(str), cap(str), str)
    str = rmDup(str)
    fmt.Println(len(str), cap(str), str)
}
package main

import "fmt"

//String remove adjacent duplicates from a string array
func rmDup(str *[]string) {
    s := *str
    for i := 1; i < len(s); i++ {
        if s[i] == s[i-1] {
            copy(s[i:], s[i+1:])
            s[len(s)-1] = ""
            s = s[:len(s)-1]
        }
    }
    *str = s
}

func main() {
    str := []string{"dog", "cat", "cat", "mouse", "mouse", "zebra", "zebra"}
    fmt.Println(len(str), cap(str), str)
    rmDup(&str)
    fmt.Println(len(str), cap(str), str)
}
main
中的
str
是否有任何方法可以返回大小和容量 在
rmDup()
中定义

比如说,

package main

import "fmt"

//String remove adjacent duplicates from a string array
func rmDup(str []string) []string {
    for i := 1; i < len(str); i++ {
        if str[i] == str[i-1] {
            copy(str[i:], str[i+1:])
            str[len(str)-1] = ""
            str = str[:len(str)-1]
        }
    }
    return str
}

func main() {
    str := []string{"dog", "cat", "cat", "mouse", "mouse", "zebra", "zebra"}
    fmt.Println(len(str), cap(str), str)
    str = rmDup(str)
    fmt.Println(len(str), cap(str), str)
}
package main

import "fmt"

//String remove adjacent duplicates from a string array
func rmDup(str *[]string) {
    s := *str
    for i := 1; i < len(s); i++ {
        if s[i] == s[i-1] {
            copy(s[i:], s[i+1:])
            s[len(s)-1] = ""
            s = s[:len(s)-1]
        }
    }
    *str = s
}

func main() {
    str := []string{"dog", "cat", "cat", "mouse", "mouse", "zebra", "zebra"}
    fmt.Println(len(str), cap(str), str)
    rmDup(&str)
    fmt.Println(len(str), cap(str), str)
}

我的意思是在不必返回函数
rmDup()
的情况下就地执行 什么都行

比如说,

package main

import "fmt"

//String remove adjacent duplicates from a string array
func rmDup(str []string) []string {
    for i := 1; i < len(str); i++ {
        if str[i] == str[i-1] {
            copy(str[i:], str[i+1:])
            str[len(str)-1] = ""
            str = str[:len(str)-1]
        }
    }
    return str
}

func main() {
    str := []string{"dog", "cat", "cat", "mouse", "mouse", "zebra", "zebra"}
    fmt.Println(len(str), cap(str), str)
    str = rmDup(str)
    fmt.Println(len(str), cap(str), str)
}
package main

import "fmt"

//String remove adjacent duplicates from a string array
func rmDup(str *[]string) {
    s := *str
    for i := 1; i < len(s); i++ {
        if s[i] == s[i-1] {
            copy(s[i:], s[i+1:])
            s[len(s)-1] = ""
            s = s[:len(s)-1]
        }
    }
    *str = s
}

func main() {
    str := []string{"dog", "cat", "cat", "mouse", "mouse", "zebra", "zebra"}
    fmt.Println(len(str), cap(str), str)
    rmDup(&str)
    fmt.Println(len(str), cap(str), str)
}

结果我自己找到了答案。由于Go语言按值执行函数调用,因此除了使用指针之外,不可能更改在另一个作用域中声明的切片

package main

import "fmt"

//String remove adjacent duplicates from a string array
func rmDup(str *[]string) []string {
 var s = *str
 for i := 1; i < len(s); i++ {
    if s[i] == s[i-1] {
        copy(s[i:], s[i+1:])
        s[len(s)-1] = ""
        s = s[:len(s)-1]
    }
}
*str = s
return s
}

func main() {

  str := []string{"dog", "cat", "cat", "mouse", "mouse", "zebra", 
  "zebra"}

  fmt.Println(str)
  newstr := rmDup(&str)
  fmt.Println(str)
  fmt.Println(newstr)
  fmt.Println(len(str), cap(str), "final")
  fmt.Println(len(newstr), cap(newstr), "final")
}

结果我自己找到了答案。由于Go语言按值执行函数调用,因此除了使用指针之外,不可能更改在另一个作用域中声明的切片

package main

import "fmt"

//String remove adjacent duplicates from a string array
func rmDup(str *[]string) []string {
 var s = *str
 for i := 1; i < len(s); i++ {
    if s[i] == s[i-1] {
        copy(s[i:], s[i+1:])
        s[len(s)-1] = ""
        s = s[:len(s)-1]
    }
}
*str = s
return s
}

func main() {

  str := []string{"dog", "cat", "cat", "mouse", "mouse", "zebra", 
  "zebra"}

  fmt.Println(str)
  newstr := rmDup(&str)
  fmt.Println(str)
  fmt.Println(newstr)
  fmt.Println(len(str), cap(str), "final")
  fmt.Println(len(newstr), cap(newstr), "final")
}

如果你想修改一个值,你需要一个指向那个值的指针,而不是一个拷贝。它的工作方式和切片的长度和容量几乎一样,但是我仍然无法去掉数组末尾的空白。如果你想修改一个值,你需要一个指向那个值的指针,而不是一个拷贝。它的工作方式和切片的长度和容量几乎一样,但是我仍然无法去掉数组末尾的空白。我的意思是在没有函数rmDup()必须返回任何东西的情况下就位,我的意思是在没有函数rmDup()必须返回任何东西的情况下就位