2,348
社区成员




package main
import (
"fmt"
)
type ValueSlice interface {
Len() int
Value(int) string
}
func SliceDiff(s1, s2 ValueSlice) bool {
if s1.Len() != s2.Len() {
return false
}
for i := 0; i < s1.Len(); i++ {
if s1.Value(i) != s2.Value(i) {
return false
}
}
return true
}
type IntSlice []int
func (is IntSlice) Len() int {
return len(is)
}
func (is IntSlice) Value(index int) string {
return fmt.Sprintf("%d", int(is[index]))
}
type StrSlice []string
func (ss StrSlice) Len() int {
return len(ss)
}
func (ss StrSlice) Value(index int) string {
return ss[index]
}
func main() {
s1 := []int{1, 2, 3}
s2 := []string{"1", "2", "3"}
fmt.Println(SliceDiff(IntSlice(s1), StrSlice(s2)))
}
package main
import(
"fmt"
"strconv"
)
type ValueSlice interface {
Len() int
Value(int) (int, error)
}
func SliceDiff(s1, s2 ValueSlice) bool {
if s1.Len() != s2.Len() {
return false
}
for i := 0; i < s1.Len(); i++ {
v1, err := s1.Value(i)
if err != nil {
return false
}
v2, err := s2.Value(i)
if err != nil {
return false
}
if v1 != v2 {
return false
}
}
return true
}
type IntSlice []int
func (is IntSlice) Len() int {
return len(is)
}
func (is IntSlice) Value(index int) (int, error) {
return int(is[index]), nil
}
type StrSlice []string
func (ss StrSlice) Len() int {
return len(ss)
}
func (ss StrSlice) Value(index int) (int, error) {
return strconv.Atoi(string(ss[index]))
}
func main() {
s1 := []int{1, 2, 3}
s2 := []string{"1", "2", "3"}
fmt.Println(SliceDiff(IntSlice(s1), StrSlice(s2)))
}
內部的算法我是會寫,但是形參不知道該用什麽類型 [quote=引用 1 楼 svenwang 的回复:] 你可以参考sort.Sort的实现方法和对接口的应用。
內部的算法我是會寫,但是形參不知道該用什麽類型 你可以参考sort.Sort的实现方法和对接口的应用。
你可以参考sort.Sort的实现方法和对接口的应用。
package main import ( "fmt" "reflect" ) func SliceDiff(one interface{}, other interface{}) bool { val1 := reflect.ValueOf(one) val2 := reflect.ValueOf(other) if val1.Len() != val2.Len() { return false } for i := 0; i < val1.Len(); i++ { s1 := val1.Index(i) s2 := val2.Index(i) if s1 != s2 { return false } } return true } func main() { s1 := []string{"1", "2", "3"} s2 := []interface{}{1, 2.3, 3} fmt.Printf("bool: %v\n", SliceDiff(s1, s2)) }
reflect.ValueOf("1") == reflect.ValueOf("1")
以上表达式的值为false
package main
import (
"fmt"
"reflect"
)
func SliceDiff(one interface{}, other interface{}) bool {
val1 := reflect.ValueOf(one)
val2 := reflect.ValueOf(other)
if val1.Len() != val2.Len() {
return false
}
for i := 0; i < val1.Len(); i++ {
s1 := val1.Index(i)
s2 := val2.Index(i)
if s1 != s2 {
return false
}
}
return true
}
func main() {
s1 := []string{"1", "2", "3"}
s2 := []interface{}{1, 2.3, 3}
fmt.Printf("bool: %v\n", SliceDiff(s1, s2))
}