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)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。