R語言——雜湊表

九茶發表於2015-08-21

前言:

在 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

相關文章