前言:
在 R 语言中有个包——hash 包提供了我们需要的哈希结构,本文主要介绍该 hash 包的使用。
(使用之前先 install.packages(“hash”) 进行安装)
其实,数据框也可以实现哈希表的功能,但是效率不高,操作也不方便。
另外,曾经出现过 rdict 包,使用起来就像 Python 里面的字典一样好用,详情请见:rdict: A hash table for R using skip lists。但是好像后来被 CRAN 取消了,也有可能是把它合并到其它包里面去了,知道的朋友有劳告知一下。
正文:
哈希表的创建和元素的添加:
## 方法一:直接创建一个hash对象
> h = hash()
## 方法二:在创建的时候添加元素
> h = hash(keys = c(‘a‘,‘b‘), values = c(2,3))
> h
<hash> containing 2 key-value pair(s).
a : 2
b : 3
## 方法三:键值对可用等号赋值
> h = hash(‘a‘=2, ‘b‘=3)
> h
<hash> containing 2 key-value pair(s).
a : 2
b : 3
## 方法四:创建hash对象以后再添加元素
> h = hash()
> h$‘c‘ = 4
> h
<hash> containing 1 key-value pair(s).
c : 4
## 方法五:最常用的添加元素的方法
> h = hash()
> .set(h, keys = ‘d‘, values = 5)
> h
<hash> containing 1 key-value pair(s).
d : 5
注释:方法四不能用于循环输入,因为 ‘$’ 的后缀不能是变量。而方法五不仅可以一次添加多对键值,而且允许 keys 是变量。
哈希表的清空和元素的删除:
## 方法一:清空哈希表
> h = hash(c(‘a‘,‘b‘), c(2,3))
> clear(h)
> h
<hash> containing 0 key-value pair(s).
NA : NULL
## 方法二:删除键值对
> h = hash(c(‘a‘,‘b‘), c(2,3))
> del(‘a‘, h) ## 等价于 delete(‘a‘, h)
> h
<hash> containing 1 key-value pair(s).
b : 3
哈希表的查找:
## 方法一:利用index(索引)
> h = hash(‘a‘ = c(2,3,4), ‘b‘ = 5)
> h
<hash> containing 2 key-value pair(s).
a : 2 3 4
b : 5
> h[‘a‘]
<hash> containing 1 key-value pair(s).
a : 2 3 4
> h[[‘a‘]]
[1] 2 3 4
> h[[‘a‘]][2]
[1] 3
## 方法二:转成列表
> h = hash(‘a‘ = c(2,3,4), ‘b‘ = 5)
> as.list(h)
$a
[1] 2 3 4
$b
[1] 5
> as.list(h)$a[2]
[1] 3
## 方法三:利用 ‘$‘
> h = hash(‘a‘ = c(2,3,4), ‘b‘ = 5)
> h$‘a‘
[1] 2 3 4
> h$‘a‘[2]
[1] 3
## 方法四:利用 values() 查找值
> h = hash(‘a‘ = c(2,3,4), ‘b‘ = 5)
> values(h)
$a
[1] 2 3 4
$b
[1] 5
> values(h)$‘a‘[2]
[1] 3
> values(h, ‘a‘)[2]
[1] 3
## 方法五:查找键
> h = hash(‘a‘ = c(2,3,4), ‘b‘ = 5)
> has.key(‘a‘, h)
a
TRUE
> keys(h)
[1] "a" "b"
哈希表的其它方法:
> h = hash(‘a‘ = 2, ‘b‘ = 3)
> is.hash(h) ## 是否是 hash 对象
[1] TRUE
> is.empty(h) ## 是否为空
[1] FALSE
> length(h) ## 哈希表的长度
[1] 2
> h2 = copy(h) ## 哈希表的拷贝
> h2
<hash> containing 2 key-value pair(s).
a : 2
b : 3
关于 R 语言 hash 包的更多内容请见:Package ‘hash’。
转载请注明出处,谢谢!(原文目录:http://blog.csdn.net/Bone_ACE/article/details/47821589)
时间: 2024-10-07 03:41:06