du1462
2013-10-15 05:59
浏览 173
已采纳

如何在Golang中找到两片字符串之间的差异?

Here is my desired outcome

slice1 := []string{"foo", "bar","hello"}
slice2 := []string{"foo", "bar"}

difference(slice1, slice2)
=> ["hello"]

I am looking for the difference between the two string slices!

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 收藏
  • 邀请回答

8条回答 默认 最新

  • duan6301 2013-10-15 06:48
    已采纳

    Depending on the size of the slices, different solutions might be best.

    My answer assumes order doesn't matter.

    Using simple loops, only to be used with smaller slices:

    package main
    
    import "fmt"
    
    func difference(slice1 []string, slice2 []string) []string {
        var diff []string
    
        // Loop two times, first to find slice1 strings not in slice2,
        // second loop to find slice2 strings not in slice1
        for i := 0; i < 2; i++ {
            for _, s1 := range slice1 {
                found := false
                for _, s2 := range slice2 {
                    if s1 == s2 {
                        found = true
                        break
                    }
                }
                // String not found. We add it to return slice
                if !found {
                    diff = append(diff, s1)
                }
            }
            // Swap the slices, only if it was the first loop
            if i == 0 {
                slice1, slice2 = slice2, slice1
            }
        }
    
        return diff
    }
    
    func main() {
        slice1 := []string{"foo", "bar", "hello"}
        slice2 := []string{"foo", "world", "bar", "foo"}
    
        fmt.Printf("%+v
    ", difference(slice1, slice2))
    }
    

    Output:

    [hello world]
    

    Playground: http://play.golang.org/p/KHTmJcR4rg

    评论
    解决 无用
    打赏 举报
查看更多回答(7条)

相关推荐 更多相似问题