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

2017-11-10 22:02:05 +08:00
 nonsense
是由正则表达式 FindAllString 返回的[]string 类型数组,FindAllString 可以之类的正则查找函数可以直接返回去重的结果吗?
数组去重好像没有语言自带的实现。。
5159 次点击
所在节点    程序员
9 条回复
misaka19000
2017-11-10 22:44:46 +08:00
蛆虫一般都用 set 来实现吧?
missdeer
2017-11-10 22:52:10 +08:00
同一楼,作为 key 插到 map[string]struct{}中
BBCCBB
2017-11-10 23:03:03 +08:00
双指针, 一个指向空,一个指向非空,将非空的移动到空的, 然后继续这种操作。
BBCCBB
2017-11-10 23:09:33 +08:00
忘了去重了,擦,去重就 set 了
wweir
2017-11-10 23:33:56 +08:00
sort 和 map 比比吧。

一个 O(nlogn),一个 O(1)但有 hash 算法的消耗。
谁更好得看数据规模了
SlipStupig
2017-11-10 23:34:10 +08:00
去 空格用 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
2017-11-11 09:18:30 +08:00
@wweir 去重的问题用 map 也是 O(n) 的问题
bramblex
2017-11-11 13:52:13 +08:00
@wweir

Map 凭什么 On ?难道你觉得因为要把 n 个项输进去所以肯定是 On 吗?
cheshire
2017-11-11 16:47:28 +08:00
@SlipStupig bool 类型的不需要加 ` if _, ok := hash[val]; ok {}` , 直接判断 hash[val] 就行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/405396

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX