消息关闭
    暂无新消息!

请问这个func该如何写?

问题作者 : Josephson2017-06-15发布
我的期望:

s1 := []string{"1", "2", "3"}
s2 := []string{"1", "3"}
fmt.Println(SliceDiff(s1, s2))



s1 := []string{1, 2, 3}
s2 := []string{"1", "3"}
fmt.Println(SliceDiff(s1, s2))



s1 := []string{1, 2, 3}
s2 := []string{1, 3}
fmt.Println(SliceDiff(s1, s2))

目前go语言不支持泛型,所以就连func的参数类型我都不知道该怎么写了,汗一个
请不吝指教....


5个回答

︿ 1

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))
}
︿ 1
你的例子里输入一个[]string,一个[]int,输出是什么呢?[]string还是[]int?
不知道SliceDiff的算法规则,说不了太多。

︿ 0
上面写错了,下面这个才是转成字符串比较的。

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)))
}