我被问到一个对我的课程有点模棱两可的问题。
The array of strings is regarded as a set, i.e. unordered.
我不确定是否需要从此数组中删除重复项?
我尝试使用谷歌搜索,但有一个地方会告诉我与下一个不同的东西。任何帮助将不胜感激。
答案 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