授業で少し曖昧な質問がありました。
The array of strings is regarded as a set, i.e. unordered.
この配列から重複を削除する必要があるかどうかわかりませんか?
グーグルを試してみましたが、ある場所で次の場所とは違うことがわかります。どんな助けでもいただければ幸いです。
授業で少し曖昧な質問がありました。
The array of strings is regarded as a set, i.e. unordered.
この配列から重複を削除する必要があるかどうかわかりませんか?
グーグルを試してみましたが、ある場所で次の場所とは違うことがわかります。どんな助けでもいただければ幸いです。
セットのウィキペディアから(数学)
セットは、明確に定義された個別のオブジェクトのコレクションです。
おそらく混乱は、セットがその要素の表示方法に依存しないという事実に由来します。その要素が繰り返されたり再配置されたりした場合、セットは同じままです。
そのため、私が知っているプログラミング言語は、要素がすでにその要素に属している場合はその要素をセットに入れません。また、要素がすでに存在する場合はそれを置き換えますが、複製は許可しません。
プログラミング言語の例
さまざまなプログラミング言語でいくつかの例を紹介します。
Pythonの場合
Pythonのセットは、「一意の要素の順序付けられていないコレクション」として定義されます。そして、あなたがそのようなセットを宣言した場合、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
Javaでは、セットは「重複する要素を含まないコレクション」として定義されます。その追加操作は次のように定義されます。「指定された要素がまだ存在しない場合は、このセットに追加します[...]このセットに要素がすでに含まれている場合、呼び出しはセットを変更せずに残します」。
Set<Integer> myInts = new HashSet<>(asList(1,2,2,3,4));
System.out.println(myInts);
このコードは、他の例と同様に、出力されます[1,2,3,4]
。
セットは、その単なる定義によって重複する要素を持つことはできません。重複要素を許可する正しい構造は、マルチセットまたはバッグです。
数学では、マルチセット(またはバッグ)は、セットとは異なり、マルチセットの要素の複数のインスタンスを許可するセットの概念の一般化です。たとえば、{a、a、b}と{a、b}は同じセットですが、異なるマルチセットです。ただし、順序は重要ではないため、{a、a、b}と{a、b、a}は同じ多重集合です。
プログラミングにおけるマルチセットの非常に一般的で有用な例は、オブジェクトの値のコレクションです。
values({a: 1, b: 1}) //=> Multiset(1,1)
ここでの値は順序付けられていませんがSet(1)
、オブジェクト値の反復を中断するような値に減らすことはできません。
さらに、リンクされたウィキペディアの記事から引用します(参照についてはそこを参照してください):
マルチセットはデータベースの重要なツールになりました。[18][19][20] たとえば、マルチセットは、データベースシステムにリレーションを実装するためによく使用されます。マルチセットは、コンピュータサイエンスでも重要な役割を果たします。
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が含まれます。したがって、もちろん、セットには重複する要素が含まれる可能性があります。重複する要素があるセットは、重複する要素がないセットとまったく同じになるだけです。
「セットは、重複する要素を含まないIterablesです。」 https://docs.scala-lang.org/overviews/collections/sets.html