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()必须返回任何东西的情况下就位