我最近开始学习R
语言。我来自 Java/Python 背景。我发现令人惊讶的一件事是associative array
inR
被称为List
而不是类似Map
or Dictionary
。
我认为像 Map 和 Dictionary 这样的名称更好地传达了数据结构是关联数组而不是列表的想法。你能告诉我这背后的背景/原因是什么。
我最近开始学习R
语言。我来自 Java/Python 背景。我发现令人惊讶的一件事是associative array
inR
被称为List
而不是类似Map
or Dictionary
。
我认为像 Map 和 Dictionary 这样的名称更好地传达了数据结构是关联数组而不是列表的想法。你能告诉我这背后的背景/原因是什么。
S 的历史比 Java 或 Python 都长。该术语源自 LisP,这是最早的高级语言之一。
此外,您可以使用命名的原子向量创建某些人可能称之为关联数组的内容:
vec <- c(a=1,b=2,c=3)
vec["b"]
#b
#2
有两种向量:“递归”和“原子”。列表属于第一类。如果有分配给元素的键,则两者都可以通过“名称”进行索引。但是,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