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

如何在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条)

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。