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

dev*_*546 12 set

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

The array of strings is regarded as a set, i.e. unordered.
Run Code Online (Sandbox Code Playgroud)

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

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

Edw*_*rzo 29

来自维基百科(数学)

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

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

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

编程语言示例

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

在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的

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

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

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


小智 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. 所以当然集合可以有重复的元素,只是具有重复元素的元素最终与没有重复元素的元素完全相同.

  • 您将set声明与set数据结构混淆.声明可以有重复但不是结构本身. (3认同)
  • 这是一个答案?你是认真的?这会让任何学习科学和数学的人感到困惑。 (2认同)

Dmi*_*sev 5

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

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

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

values({a: 1, b: 1}) //=>  Multiset(1,1)
Run Code Online (Sandbox Code Playgroud)

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

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

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