10

我最近开始学习R语言。我来自 Java/Python 背景。我发现令人惊讶的一件事是associative arrayinR被称为List而不是类似Mapor Dictionary

我认为像 Map 和 Dictionary 这样的名称更好地传达了数据结构是关联数组而不是列表的想法。你能告诉我这背后的背景/原因是什么。

4

2 回答 2

18

S 的历史比 Java 或 Python 都长。该术语源自 LisP,这是最早的高级语言之一。

此外,您可以使用命名的原子向量创建某些人可能称之为关联数组的内容:

 vec <- c(a=1,b=2,c=3)
 vec["b"]
 #b 
 #2 

有两种向量:“递归”和“原子”。列表属于第一类。如果有分配给元素的键,则两者都可以通过“名称”进行索引。但是,R 中的术语“名称”严格指代存在于具有对象值的环境中的符号。见?as.name。在 R 中,“名称”或“符号”是代码中未引用的语言对象,而字符值用于通过键从数据对象中分配或提取值。

于 2013-01-03T07:05:39.573 回答
4

“地图”是世界的图表。要在地图上查找东西,您必须进行二维扫描。这是 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
  • 因为R不是那样的。
于 2013-01-03T08:54:55.187 回答