我最近开始学习R语言.我来自Java/Python背景.我发现令人惊讶的一件事是,associative array在R被叫,List而不是像Map或Dictionary.
我认为像Map和Dictionary这样的名称更好地传达了数据结构是关联数组而不是列表的想法.能告诉我这背后的原因是什么?
42-*_*42- 13
S的历史比Java或Python更长.该术语源自LisP最早的高级语言之一.
此外,您可以使用命名原子向量创建某些人可能称为关联数组的内容:
vec <- c(a=1,b=2,c=3)
vec["b"]
#b
#2
Run Code Online (Sandbox Code Playgroud)
有两种向量:"递归"和"原子".列表是第一类.如果为元素分配了键,则可以通过"名称"对两者进行索引.但是,R中的术语"名称"严格指的是存在于具有对象值的环境中的符号.见?as.name.在R中,"名称"或"符号"是代码中未引用的语言对象,而字符值用于通过键分配或提取数据对象的值.
"地图"是世界的图表.要在地图上查找内容,您必须以二维方式进行扫描.这是O(n ^ 2)."字典"是按字母顺序排列的单词.要在字典中查找单词,您必须进行二进制搜索.这是O(log n)性能.
因此,对我而言,这两个词都没有准确地描述结构,也没有关联数组的表现......
从数学上讲,关联数组只是一个离散范围的函数.所以它们应该被称为函数.双方括号只是一种语法上的烦恼.我们为什么不能这样做:
z = list()
z("foo") = c(1,2,3)
print(z("foo")) # prints 1 2 3
print(z("bar")) # errors
Run Code Online (Sandbox Code Playgroud)