编程中的向量、集合和元组有什么区别?
7 回答
- 向量:相同类型对象的有序集合。
- 集合:对象的无序集合,可能是相同的类型,也可能是不同的,具体取决于集合类型和语言。任何给定的对象只能出现一次。
- 元组:不同类型对象的有序集合。
Avector
是允许重复的项目的有序序列。
Aset
是无序且不允许重复的项目的集合。
Atuple
是给定长度的项目的有序序列。
数学上
元组具有将其与集合区分开来的属性。
- 一个元组可能包含同一元素的多个实例,因此元组 (1,2,2,3) != (1,2,3) 但设置 {1,2,2,3} = {1,2,3} .
- 元组元素是有序的:元组 (1,2,3) != (3,2,1),但设置 {1,2,3} = {3,2,1}。
- 元组具有有限数量的元素,而集合或多重集可能具有无限数量的元素。
Vector 是由多个元组表示的不同类型。
干杯:-)
元组是对象的异构集合,应将其视为一个单元:例如,("John", "Smith", 30) 是一个 (String, String, Integer) 元组。
列表(在 C++ 中:以及向量)是对象的同质集合——也就是说,每个对象都可以被统一对待。它们是否实际上是相同的类型取决于语言,但关键是它们可以以相同的方式处理。
集合是一个无序的唯一同质集合——你知道它包含什么对象,它们是什么类型,但不知道按什么顺序,它只包含每个对象中的一个。
向量有顺序
元组是有序的并且可以有重复元素。
集合是无序的,重复元素不会改变集合。
例如:{a,b}、{b,a} 和 {b,b,a} 都是同一个集合,而 (a,b)、(b,a) 和 (b,b,a) 是所有不同的元组。
不同之处在于元组不应该被视为集合,而向量和集合是。
元组用于表示复合值,例如具有 (x,y,z) 坐标的 3d 空间中的位置,将其视为集合没有意义,因为 yes 是 3 个数字的列表,但 3 个数字有不同的意思结合起来形成一个特定的意思。
将元组视为具有可以具有不同类型的无名位置属性的结构。因此并不意味着存储大量值,这就是为什么这些东西的所有实现都针对其中的一小部分进行了优化
元组的一个例子是用于描述 SQL 数据库中单行的列的类型,实际上这就是关系代数中所谓的行。
Vector (顺便说一下,这个名字很糟糕,因为数学中的这个词用于复合值而不是集合)是一个有序集合,旨在存储大量值,它通常被实现为根据需要增长,保持 O( 1)
SQL DB 中没有主键的表将是元组向量。
Set是唯一元素的集合,可以排序,但不一定非要排序。
SQL DB 中具有主键的表将是一组元组。
向量有顺序,集合没有(并且不能有重复),元组接近向量,但在实践中通常更像结构。