V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nonsense
V2EX  ›  程序员

请教个小白问题, golang 数组去重去空怎么实现比较高效?

  •  
  •   nonsense · 2017-11-10 22:02:05 +08:00 · 5147 次点击
    这是一个创建于 2330 天前的主题,其中的信息可能已经有所发展或是发生改变。
    是由正则表达式 FindAllString 返回的[]string 类型数组,FindAllString 可以之类的正则查找函数可以直接返回去重的结果吗?
    数组去重好像没有语言自带的实现。。
    9 条回复    2017-11-11 16:47:28 +08:00
    misaka19000
        1
    misaka19000  
       2017-11-10 22:44:46 +08:00   ❤️ 2
    蛆虫一般都用 set 来实现吧?
    missdeer
        2
    missdeer  
       2017-11-10 22:52:10 +08:00   ❤️ 1
    同一楼,作为 key 插到 map[string]struct{}中
    BBCCBB
        3
    BBCCBB  
       2017-11-10 23:03:03 +08:00   ❤️ 1
    双指针, 一个指向空,一个指向非空,将非空的移动到空的, 然后继续这种操作。
    BBCCBB
        4
    BBCCBB  
       2017-11-10 23:09:33 +08:00   ❤️ 1
    忘了去重了,擦,去重就 set 了
    wweir
        5
    wweir  
       2017-11-10 23:33:56 +08:00 via Android   ❤️ 1
    sort 和 map 比比吧。

    一个 O(nlogn),一个 O(1)但有 hash 算法的消耗。
    谁更好得看数据规模了
    SlipStupig
        6
    SlipStupig  
       2017-11-10 23:34:10 +08:00   ❤️ 1
    去 空格用 strings.Trims,要去重的话用 Set 实现,golang 没有 set 函数可以自己用 map 去实现判定就可以高效去重复:
    eg:

    set 构造:
    set := make(map[string]bool)
    if _, ok := set[key]; ok {
    //存在
    return
    }else{

    // 如果删除空格后字符串长度 0,说明是个空格我们放弃
    if len(string.Trims(key)) == 0{
    return
    }
    //添加 key
    elements[key] = true
    }
    wweir
        7
    wweir  
       2017-11-11 09:18:30 +08:00
    @wweir 去重的问题用 map 也是 O(n) 的问题
    bramblex
        8
    bramblex  
       2017-11-11 13:52:13 +08:00 via iPhone
    @wweir

    Map 凭什么 On ?难道你觉得因为要把 n 个项输进去所以肯定是 On 吗?
    cheshire
        9
    cheshire  
       2017-11-11 16:47:28 +08:00   ❤️ 1
    @SlipStupig bool 类型的不需要加 ` if _, ok := hash[val]; ok {}` , 直接判断 hash[val] 就行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4061 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 05:18 · PVG 13:18 · LAX 22:18 · JFK 01:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.