19

我被问到一个对我的课程作业来说有点模棱两可的问题。

The array of strings is regarded as a set, i.e. unordered.

我不确定是否需要从此数组中删除重复项?

我试过谷歌搜索,但一个地方会告诉我与下一个地方不同的东西。任何帮助,将不胜感激。

4

4 回答 4

35

来自维基百科的集合(数学)

集合是定义明确且不同的对象的集合。

也许混淆源于这样一个事实,即集合不依赖于其元素的显示方式。如果据称其元素被重复或重新排列,则集合保持不变。

因此,如果元素已经属于某个元素,我所知道的编程语言不会将元素放入集合中,或者如果它已经存在,它们会替换它,但绝不允许重复。

编程语言示例

让我举几个不同编程语言的例子。

在 Python 中

Python 中的集合被定义为“唯一元素的无序集合”。如果你声明一个这样的集合,a = {1,2,2,3,4}它只会添加2一次到集合中。

如果你这样做print(a),输出将是{1,2,3,4}.

哈斯克尔

在 Haskell 中,集合的插入操作被定义为:“[...] 如果集合已经包含一个等于给定值的元素,则将其替换为新值。”

因此,如果您这样做:let a = fromList([1,2,2,3,4]),如果您打印a到主输出,它将呈现[1,2,3,4].

爪哇

在 Java 中,集合被定义为:“一个不包含重复元素的集合。”。它的添加操作被定义为:“如果指定的元素尚不存在,则将其添加到此集合中 [...] 如果此集合已包含该元素,则调用使集合保持不变”。

Set<Integer> myInts = new HashSet<>(asList(1,2,2,3,4));
System.out.println(myInts);

与其他示例一样,此代码将输出[1,2,3,4].

于 2012-04-04T13:01:49.860 回答
8

一个集合的定义不能有重复的元素。允许重复元素的正确结构是Multiset 或 Bag

在数学中,多重集(或袋子)是对集合概念的概括,与集合不同,它允许多重集元素的多个实例。例如,{a, a, b} 和 {a, b} 是不同的多重集,尽管它们是相同的集。然而,顺序并不重要,所以 {a, a, b} 和 {a, b, a} 是同一个多重集。

编程中一个非常常见且有用的 Multiset 示例是对象值的集合:

values({a: 1, b: 1}) //=>  Multiset(1,1)

这里的值是无序的,但不能减少到Set(1)例如破坏对象值的迭代。

此外,引用链接的维基百科文章(参见那里的参考资料):

多重集已成为数据库中的重要工具。[18][19][20] 例如,多集通常用于在数据库系统中实现关系。多重集在计算机科学中也发挥着重要作用。

于 2017-04-21T04:30:26.783 回答
7

让 A={1,2,2,3,4,5,6,7,...} 和 B={1,2,3,4,5,6,7,...} 那么任何元素A 在 B 中,B 中的任何元素在 A ==> A 包含 B 且 B 包含 A ==> A=B。所以当然集合可以有重复的元素,只是具有重复元素的集合最终会与没有重复元素的集合完全相同。

于 2013-06-20T20:59:47.190 回答
1

“集合是不包含重复元素的可迭代对象。” https://docs.scala-lang.org/overviews/collections/sets.html

于 2019-01-30T19:19:47.837 回答