如何解决如何在Golang中按索引交换值
在python的numpy
中,可以像这样轻松地通过列表中的索引交换值:
a[[2,3,5]] = a[[5,2,3]]
有没有在Golang中实现此功能的好方法。
解决方法
Go没有像这样的精美索引;您能做的最接近的是
a[2],a[3],a[5] = a[5],a[2],a[3]
使用常规索引和常规tuple assignment。
,在Go [...] [中是否有实现该功能的好方法?井雷]
不。 Go不为此提供语法。 请注意,就地置换是一个很难解决的问题(numpy也可能根本不这样做)。
复制并置换。
,如果您想要类似的东西,可以过度设计一些解决方案,但会产生很多问题和处理方式
要使您了解我的意思,请参阅此Go PlayGround Go将Slices用作参考,因此创建了一个可以交换的函数,您会得到类似的东西
package main
import (
"errors"
"fmt"
"strings"
"strconv"
)
func main() {
a := []int{1,2,3,4,5,6}
err := swap(a,"1,5=>0,4")
fmt.Println(a,err)
}
func swap(arr []int,str string) error {
parts := strings.Split(str,"=>")
if len(parts) != 2 {
return errors.New("Invalid Input")
}
leftIndices := strings.Split(parts[0],",")
rightIndices := strings.Split(parts[1],")
if len(leftIndices) != len(rightIndices) {
return errors.New("Swap Indices not Balanced")
}
fmt.Println(leftIndices,rightIndices)
for i := 0; i < len(leftIndices); i++ {
i1,_:= strconv.Atoi(leftIndices[i])
i2,_:= strconv.Atoi(rightIndices[i])
arr[i1],arr[i2] = arr[i2],arr[i1]
fmt.Println(arr)
}
return nil
}
即使是这样,我也需要处理很多情况(尽管仍然有一些未得到处理),使某些东西通用将需要更多的检查和复杂性
使用类似
这样的内置语法会更容易a[0],a[1],a[2] = a[3],a[4],a[5]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。