一组可以有重复的元素吗?

时间:2012-04-04 12:50:42

标签: set

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

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

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

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

4 个答案:

答案 0 :(得分:28)

来自维基百科(数学)

  

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

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

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

编程语言示例

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

在Python中

Python中的一个集合被定义为“ unique elements ”的无序集合。如果您声明一个类似a = {1,2,2,3,4}的集合,它只会向集合添加2一次。

如果您执行print(a),则输出将为{1,2,3,4}

<强>的Haskell

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

因此,如果您执行此操作:let a = fromList([1,2,2,3,4]),如果您将a打印到主要输出,它将呈现[1,2,3,4]

<强>爪哇

在Java集中定义为:“包含无重复元素的集合。”。它的添加操作定义为:“如果指定元素尚未存在,则将其添加到此集合中[...]如果此集合已包含该元素,则调用将保持集合”。< / p>

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

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

答案 1 :(得分:7)

设A = {1,2,2,3,4,5,6,7,...}和B = {1,2,3,4,5,6,7,...}然后A中的任何元素都在B中,B中的任何元素都在A ==&gt;中。 A包含B和B包含A ==&gt; A = B。所以当然集合可以有重复的元素,只是具有重复元素的元素最终与没有重复元素的元素完全相同。

答案 2 :(得分:3)

一个集合的单纯定义不能包含重复元素。允许重复元素的正确结构是Multiset or Bag

  

在数学中,多集(或包)是集合概念的概括,与集合不同,它允许多集合元素的多个实例。例如,{a,a,b}和{a,b}是不同的多重集,尽管它们是相同的集合。但是,顺序无关紧要,因此{a,a,b}和{a,b,a}是相同的多重集。

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

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

此处的值是无序的,但不能简化为Set(1),例如打破对象值的迭代。

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

  

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

答案 3 :(得分:0)

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