For loop Go中的惯用拼接
我检查了一个现有的案例,但它与我的案例不同 我需要在索引中提取一个元素,并根据For loop Go中的惯用拼接,for-loop,go,slice,For Loop,Go,Slice,我检查了一个现有的案例,但它与我的案例不同 我需要在索引中提取一个元素,并根据Compare函数在运行时中断for循环 问题: 如果在0index,index-1将抛出范围错误的切片边界,同样,如果index+1大于len(elements) 问题:实现上述目标的最佳简明方法是什么 for index, element := range elements { if element.Compare() == true { elements = append(elements
Compare
函数在运行时中断for
循环
问题:
如果在0
index
,index-1
将抛出范围错误的切片边界,同样,如果index+1
大于len(elements)
问题:实现上述目标的最佳简明方法是什么
for index, element := range elements {
if element.Compare() == true {
elements = append(elements[:index-1], elements[index+1:]...)
break
}
}
尝试
for index, element := range elements {
if element.Compare() == true {
if len(elements) > 1 {
elements = append(elements[:index-1], elements[index+1:]...)
} else if len(elements) == 1 {
delete(elements, 0)
}
break
}
}
尝试2有什么改进/建议吗
其思想是将剩余的元素从开始复制到索引,然后再复制后面的任何元素
var elements = []string {"a", "b", "c", "d"}
fmt.Println(elements)
for index, element := range elements {
if element == "c" {
var temp = elements[:index]
for i := index + 1; i<len(elements); i++ {
temp = append(temp, elements[i])
}
elements = temp
break
}
}
fmt.Println(elements)
var元素=[]字符串{“a”、“b”、“c”、“d”}
fmt.Println(要素)
对于索引,元素:=范围元素{
如果元素==“c”{
变量温度=元素[:索引]
对于i:=index+1;ia中的高指数是独占的
这意味着你的例子是有缺陷的,而且不需要特殊处理
正确的切片表达式为:
elements = append(elements[:index], elements[index+1:]...)
如果index
是第一个元素(0
),那么元素[:0]
将是一个空片段
如果index
是最后一个元素(len-1
),那么elements[index+1:][/code>也将是一个空切片,因为index+1
将等于切片的长度。因此,解决方案很简单:
for index, element := range elements {
if element.Compare() {
elements = append(elements[:index], elements[index+1:]...)
break
}
}
为了在运动场上演示它,让我们用一个简单的索引检查代替Compare()
方法:
for _, idxToRemove := range []int{0, 2, 4} {
s := []int{0, 1, 2, 3, 4}
for i := range s {
if i == idxToRemove {
s = append(s[:i], s[i+1:]...)
break
}
}
fmt.Println(idxToRemove, ":", s)
}
输出(在上尝试):
如果切片s
已排序且len(s)
较大,则使用二进制搜索查找x
。例如
package main
import (
"fmt"
"sort"
)
func pluck(s []string, x string) []string {
i := sort.SearchStrings(s, x)
if i >= 0 && i < len(s) && s[i] == x {
s = append(s[:i], s[i+1:]...)
}
return s
}
func main() {
s := []string{"a", "b", "c", "d"}
fmt.Println(s)
s = pluck(s, "b")
fmt.Println(s)
}
package main
import "fmt"
func pluck(s []string, x string) []string {
for i, v := range s {
if v == x {
s[i] = s[len(s)-1]
s = s[:len(s)-1]
break
}
}
return s
}
func main() {
s := []string{"a", "b", "c", "d"}
fmt.Println(s)
s = pluck(s, "b")
fmt.Println(s)
}
package main
import "fmt"
func pluck(s []string, x string) []string {
for i, v := range s {
if v == x {
s = append(s[:i], s[i+1:]...)
break
}
}
return s
}
func main() {
s := []string{"a", "b", "c", "d"}
fmt.Println(s)
s = pluck(s, "b")
fmt.Println(s)
}
如果切片s
的顺序不需要保留,则切换元素。例如
package main
import (
"fmt"
"sort"
)
func pluck(s []string, x string) []string {
i := sort.SearchStrings(s, x)
if i >= 0 && i < len(s) && s[i] == x {
s = append(s[:i], s[i+1:]...)
}
return s
}
func main() {
s := []string{"a", "b", "c", "d"}
fmt.Println(s)
s = pluck(s, "b")
fmt.Println(s)
}
package main
import "fmt"
func pluck(s []string, x string) []string {
for i, v := range s {
if v == x {
s[i] = s[len(s)-1]
s = s[:len(s)-1]
break
}
}
return s
}
func main() {
s := []string{"a", "b", "c", "d"}
fmt.Println(s)
s = pluck(s, "b")
fmt.Println(s)
}
package main
import "fmt"
func pluck(s []string, x string) []string {
for i, v := range s {
if v == x {
s = append(s[:i], s[i+1:]...)
break
}
}
return s
}
func main() {
s := []string{"a", "b", "c", "d"}
fmt.Println(s)
s = pluck(s, "b")
fmt.Println(s)
}
输出:
[a b c d]
[a c d]
[a b c d]
[a d c]
[a b c d]
[a c d]
否则,拼接片s
元件。例如
package main
import (
"fmt"
"sort"
)
func pluck(s []string, x string) []string {
i := sort.SearchStrings(s, x)
if i >= 0 && i < len(s) && s[i] == x {
s = append(s[:i], s[i+1:]...)
}
return s
}
func main() {
s := []string{"a", "b", "c", "d"}
fmt.Println(s)
s = pluck(s, "b")
fmt.Println(s)
}
package main
import "fmt"
func pluck(s []string, x string) []string {
for i, v := range s {
if v == x {
s[i] = s[len(s)-1]
s = s[:len(s)-1]
break
}
}
return s
}
func main() {
s := []string{"a", "b", "c", "d"}
fmt.Println(s)
s = pluck(s, "b")
fmt.Println(s)
}
package main
import "fmt"
func pluck(s []string, x string) []string {
for i, v := range s {
if v == x {
s = append(s[:i], s[i+1:]...)
break
}
}
return s
}
func main() {
s := []string{"a", "b", "c", "d"}
fmt.Println(s)
s = pluck(s, "b")
fmt.Println(s)
}
输出:
[a b c d]
[a c d]
[a b c d]
[a d c]
[a b c d]
[a c d]
您的问题是什么?从切片中提取元素的最佳方法是什么?您是否尝试删除单个元素?位于索引索引?是的,仅单个元素,然后断开