简单实现hashSet -- 应用篇

简单实现hashSet -- 应用篇

  • 写这篇文章的起因:
  •  在使用golang和php的时候我们经常会判断一个变量是否在map或者数组中;
  •  在php中的时候我们经常使用in_array()来判断,这里是我们经常用的。
  • 其实用in_array()这个函数就是对数组进行遍历判断是否存在时间复杂度是log(n)
  •  一般数组不是太大也就这样了;
  • 但是在golang中并没有封装这个函数,这个需要我们自己去封装。
  •  如果也是用循环的方式去判断变量是否存在,那是不是感觉很low,也就是这个原因引出了这篇文章

 

1. 在php和golang中都适用,主要原理是判断key是否存在

 

    // 在golang中可以这样

    type HashSet struct {
        set map[interface{}}]bool
    }
    
    func NewHashSet() *HashSet {
        return &HashSet{make(map[interface{}]bool)}
    }
    
    func (set *HashSet) Add(k interface{}) bool {
        _, ok := set.set[k]
        set.set[i] = true
        return !ok //False if it existed already
    }
    
    func (set *HashSet) Get(k interface{}) bool {
        _, found := set.set[k]
        return found //true if it existed already
    }
    
    func (set *HashSet) Remove(k interface{}) {
        delete(set.set, k)
    }
    // InArray 函数就简单的模拟了in_array 函数
    // 需要注意的是,在设置 $HashSet 的时候需要设置在key 中,
    // 例 : 
    
    $HashSet = [
        "a" => true,
        "b" => true,
    ];

    function InArray(&$HashSet,$key) {
        return isset($HashSet[$key]);
    }
   
    var_dump(InArray($HashSet,"b"))

    // 当然这里也可以不用InArray 封装,直接用 isset,这里只是为了举例子

    // 如果是正常数组
    
    $HashSet2 = [
        "a" ,"b"
    ];

    // 可以使用 array_flip() 函数(交换数组中的键和值。)
    // 再使用isset进行判断
总结
1. 就是数的key与value调换,利用map和数组中的key的唯一性来判断 
2. 判断key是否存在的时间复杂度是 O(1);

GitHub地址

参考文献
[1] Go 语言简单实现HashSet
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值