スライスから要素を削除したいと思います。しかし、私がこれを行うと、基本配列内に2つの空の要素が生成されてしまいます。 私はすでにhere、here関数は、他の場所で宣言されている文字列配列のスライスのサイズを変更することはできますか? golang
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(str)
newstr := rmDup(str)
fmt.Println(str)
fmt.Println(newstr)
fmt.Println(len(str), cap(str), "final")
fmt.Println(len(newstr), cap(newstr), "final")
}
を検索メインでSTRががrmDup(で定義されたサイズと容量を返すことができることをどのような方法があります)
あなたが値を変更したい場合は、その値ではなく、コピーへのポインタを必要とします。 – JimB
スライスの長さと容量が変わったのとほぼ同じように動作しましたが、配列の最後の空白を取り除くことはできません。 https://play.golang.org/p/2zVBE7ZT-P –