hashtab
位於 utils
包(package)。 說明
創建和操作可變哈希表。
用法
hashtab(type = c("identical", "address"), size)
gethash(h, key, nomatch = NULL)
sethash(h, key, value)
remhash(h, key)
numhash(h)
typhash(h)
maphash(h, FUN)
clrhash(h)
is.hashtab(x)
## S3 method for class 'hashtab'
h[[key, nomatch = NULL, ...]]
## S3 replacement method for class 'hashtab'
h[[key, ...]] <- value
## S3 method for class 'hashtab'
print(x, ...)
## S3 method for class 'hashtab'
format(x, ...)
## S3 method for class 'hashtab'
length(x)
## S3 method for class 'hashtab'
str(object, ...)
參數
type |
|
size |
指定預期條目數的整數。 |
h , object |
一個哈希表。 |
key |
一個R用作鍵的對象。 |
nomatch |
如果 |
value |
與 |
FUN |
包含兩個參數(鍵和值)的 |
x |
要測試、打印或格式化的對象。 |
... |
附加參數。 |
細節
哈希表是一種用於有效地將鍵與值關聯起來的數據結構。哈希表與 environment
類似,但鍵可以是任意對象。與環境類似,但與 R 中的命名列表和大多數其他對象不同,哈希表是可變的,即修改時不會複製它們,而賦值意味著隻是為同一對象賦予新名稱。
新的哈希表由 hashtab
創建。有兩種可用變體:如果鍵是identical()
(type = "identical"
,默認值),或者它們在內存中的地址相等(type = "address"
),則可以認為鍵匹配。默認的 "identical"
類型幾乎總是正確的選擇。 size
參數提供了設置初始哈希表大小的提示。如果需要,哈希表將會增長,但指定預期大小可能會更有效。
gethash
返回與 key
關聯的值。如果表中不存在key
,則返回nomatch
的值。
sethash
添加新的鍵/值關聯或更改現有鍵的當前值。 remhash
刪除 key
的條目(如果有)。
maphash
使用兩個參數(條目鍵和條目值)為哈希表中的每個條目調用 FUN
。處理條目的順序是不可預測的。 FUN
在表中添加條目或從表中刪除條目的結果也是不可預測的,除非刪除當前正在處理的條目將達到預期的效果。
clrhash
從哈希表中刪除所有條目。
值
hashtab
返回指定的 type
的新哈希表。
gethash
返回與 key
關聯的值,如果沒有這樣的值,則返回 nomatch
。
sethash
以不可見方式返回value
。
如果找到並刪除了 key
的條目,則 remhash
會無形地返回 TRUE
;如果未找到條目,則會返回 FALSE
。
numhash
返回表中當前的條目數。
typhash
返回指定哈希表類型的字符串,為 "identical"
或 "address"
之一。
maphash
和clrhash
不可見地返回NULL
。
注意
接口設計鬆散地基於 Common Lisp 中的哈希表支持。
"identical"
哈希表使用的哈希函數和相等性測試與 duplicated
和 unique
內部使用的相同,但有兩個異常:
-
比較閉包時,不會忽略閉包環境。這對應於使用
ignore.environment = FALSE
調用identical()
,這是identical()
的默認設置。 -
外部指針對象作為引用對象進行比較,對應於調用
identical()
和extptr.as.ref = TRUE
。這確保了帶有包含外部指針的鍵的哈希表在序列化和反序列化時表現得合理。
作為實驗性函數,元素運算符[[
還可以用於獲取或設置哈希表條目,並且length
可以用於獲取條目數。目前尚不清楚這是否是一個好主意。
例子
## Create a new empty hash table.
h1 <- hashtab()
## IGNORE_RDIFF_BEGIN
h1
## IGNORE_RDIFF_END
## Add some key/value pairs.
sethash(h1, NULL, 1)
sethash(h1, .GlobalEnv, 2)
for (i in seq_along(LETTERS)) sethash(h1, LETTERS[i], i)
## Look up values for some keys.
gethash(h1, NULL)
gethash(h1, .GlobalEnv)
gethash(h1, "Q")
## Remove an entry.
(remhash(h1, NULL))
gethash(h1, NULL)
(remhash(h1, "XYZ"))
## Using the element operator.
h1[["ABC"]]
h1[["ABC", nomatch = 77]]
h1[["ABC"]] <- "DEF"
h1[["ABC"]]
## Integers and real numbers that are equal are considered different
## (not identical) as keys:
identical(3, 3L)
sethash(h1, 3L, "DEF")
gethash(h1, 3L)
gethash(h1, 3)
## Two variables can refer to the same hash table.
h2 <- h1
identical(h1, h2)
## set in one, see in the "other" <==> really one object with 2 names
sethash(h2, NULL, 77)
gethash(h1, NULL)
## IGNORE_RDIFF_BEGIN
str(h1)
## IGNORE_RDIFF_END
## An example of using maphash(): get all hashkeys of a hash table:
hashkeys <- function(h) {
val <- vector("list", numhash(h))
idx <- 0
maphash(h, function(k, v) { idx <<- idx + 1
val[idx] <<- list(k) })
val
}
## IGNORE_RDIFF_BEGIN
kList <- hashkeys(h1)
str(kList) # the *order* is "arbitrary" & cannot be "known"
## IGNORE_RDIFF_END
相關用法
- R hasName 檢查姓名
- R hsearch-utils 幫助搜索實用程序
- R help.request 向 R-help 發送帖子
- R help.start 超文本文檔
- R help 文檔
- R head 返回對象的第一部分或最後部分
- R help.search 搜索幫助係統
- R select.list 從列表中選擇項目
- R COMPILE 編譯用於 R 的文件
- R readRegistry 讀取 Windows 注冊表配置單元
- R browseVignettes 在 HTML 瀏覽器中列出暈影
- R nsl 按主機名查找 IP 地址
- R edit 調用文本編輯器
- R create.post 準備電子郵件和帖子的輔助函數
- R download.packages 從類似 CRAN 的存儲庫下載軟件包
- R DLL.version MS Windows 上的 DLL 版本信息
- R ls.str 列表對象及其結構
- R Rscript R 前端腳本
- R bug.report 發送錯誤報告
- R PkgUtils 用於構建和檢查附加包的實用程序
- R cite 引用參考書目條目
- R SweaveSyntConv 轉換 Sweave 語法
- R RSiteSearch 搜索文檔中的關鍵詞或短語
- R glob2rx 將通配符或通配符模式更改為正則表達式
- R getFromNamespace 用於開發命名空間的實用函數
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Hash Tables (Experimental)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。