問題タブ [duplicate-data]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ms-access - MS Access での重複データを含む行の検索
特に姓と生年月日を含む大きなテーブルがあります。姓と生年月日がテーブルの別の行と同じ行のみを返すクエリを作成する必要があります。
これは、アプリケーションを作成した人々に関する情報を含むテーブルです。複数回応募した人を特定したい。
セット操作を使用してこれを行う方法を考えることができますが、MS Access はそれらを実装していないようです。
ご協力いただきありがとうございます。
perl - Perl を使用して、1 つ以上の重複があるファイルシステムをクリーンアップする
私は 2 つのディスクを持っています。1 つはアドホック バックアップ ディスクで、どこにでも重複があり、もう 1 つは私のラップトップのディスクも同様に混乱しています。一意のファイルをバックアップし、重複を削除する必要があります。したがって、次のことを行う必要があります。
- サイズがゼロでないすべてのファイルを検索
- すべてのファイルの MD5 ダイジェストを計算する
- ファイル名が重複しているファイルを検索する
- マスターと他のコピーから一意のファイルを分離します。
このスクリプトの出力を使用して、次のことを行います。
- 一意のファイルとマスター ファイルをバックアップする
- 他のコピーを削除する
一意のファイル= 他のコピーなし
マスター コピー= 最初のインスタンス。他のコピーが存在し、優先パスと一致する可能性があります
その他のコピー= マスター コピーではない
追加のスクリプトを作成しましたが、これは理にかなっているように見えますが、
合計ファイル != 固有のファイル + マスター コピー + その他のコピー
2 つの質問があります。
- 私のロジックのどこにエラーがありますか?
- これを行うより効率的な方法はありますか?
膨大なファイル リストを処理するときにメモリ不足にならないように、ディスク ハッシュを選択しました。
sql - データベーステーブルの行を複製する標準的な方法はありますか?
もちろん、フィールド名を明示的に使用せずに、キーではなく行を複製したいと思います。
SQLの方法はありますか、それともコードを介してフィールド名を列挙する必要がありますか?
コードとデータベースの依存関係を最小限に抑えたいので、フィールド名を明示的に使用したくありません。
MsAccess2003で使用します。標準的な方法が存在しない場合に備えて説明します。
php - PHP で連想配列の配列から dupes/sort を削除する
連想配列の配列があります
2 つの質問
カスタムコンパレータとして機能するコールバックを提供できるarray_uniqueはありますか?
カスタムフィールド「スパークプラグ」でソートするにはどうすればよいですか
xml - XSLTで重複する同じレベルの要素を排除する
同じレベルのノード名のリストを重複せずに表示したいと思っています。
私が持っているとしましょう
c、d、e、fを表示したいのですが。同様の問題に対するいくつかの解決策を見つけて、出力から重複する兄弟を削除しましたが、重複する「いとこ」を削除するのに問題があります。
sql - 優先度の列に基づいてリストを重複排除するためのヒント
データは複数のソースから発信されているため、重複するエントリを含む行のセットがあります。これらのデータソースの優先度を示す別の参照テーブルもあります。
このリストを重複排除するための最も効果的なt-SQLのヒントはありますか?
基本的に私は持っています:
私はこれを一時テーブルに配置してから、より効率的であると思われる奇妙な方法で削除してきました。
表Aには、2つのソースの列が同じですが、データが異なる可能性があるため、価格が異なる可能性があります。課題は、最も優先度の高いソースからの行から価格(およびその他すべての情報)を取得する必要があることです。厄介なことに、私はすべてのソースからのすべてのアイテムのデータを持っているわけではありません。
したがって、アイテム1にはソースAとBからのデータが含まれている可能性がありますが、アイテム2にはソースBとCからのデータしか含まれていない可能性があります。したがって、削除は一意のアイテムごとに行う必要があります。
arrays - データベース内の重複エントリのカウント
郵便番号がデータベースに入力された回数をカウントしたい。正しい機能を使用しているかどうかはわかりません。また、最終的には、データベースに入力された年ごとに郵便番号を区切る必要があります。私は年を分ける方法を知っています。私が本当に助けを必要としているのは、重複したエントリを数えることです。これが私のコードです。
回答: 動作するコードは次のとおりです。
perl - QIF ファイルで重複していますか?
QIF ファイルで重複したトランザクション (同じ日付、金額、請求者など) を削除する良い方法はありますか? PERL の Finance:QIF を見たのですが、レコードの削除機能があるようです。
あるいは、誰かが良い QIF --> CSV コンバーターを持っていますか?
私は PERL ソリューションを検討していますが、他のアイデアにもオープンです。
c++ - コレクション内の重複する要素を見つけてグループ化するための高速なアルゴリズムは何ですか?
要素のコレクションがあるとします。重複している要素をどのように選択し、それらを最小の比較で各グループに入れることができますか? できれば C++ ですが、アルゴリズムは言語よりも重要です。たとえば、{E1,E2,E3,E4,E4,E2,E6,E4,E3} を指定した場合、{E2,E2}、{E3,E3}、{E4,E4,E4} を抽出します。どのデータ構造とアルゴリズムを選択しますか? std::multimap のような事前にソートされたデータ構造の場合、データ構造のセットアップのコストも含めてください。
アップデート
提案されたように物事をより明確にするため。1 つの制約があります。要素が重複していることを確認するには、要素を単独で比較する必要があります。
したがって、ハッシュは適用されません。事実上、比較を重い要素(データのチャンクなど)から軽い要素(整数)にシフトし、比較を減らしますが、それらをなくすわけではなく、最終的には元に戻ります1つの衝突バケット内にある場合の元の問題。
それぞれ GB の潜在的な重複ファイルがたくさんあるふりをすると、それらは人間が知っているすべてのハッシュアルゴリズムによって同じハッシュ値を持ちます。これで、実際の重複を見つけることができます。
いいえ、それは実際の問題ではありません (MD5 でさえ、実際のファイルの一意のハッシュを生成するのに十分です)。しかし、データ構造 + 比較の最小量を含むアルゴリズムを見つけることに集中できるように、ふりをしてください。
私がやっていることは
STL std::list データ構造に表現します (1) その要素の削除は、たとえばベクトルよりも安価です 2) その挿入は、ソートを必要とせずに安価です。)
1 つの要素を取り出して残りの要素と比較し、重複が見つかった場合はリストから除外します。リストの最後に到達すると、1 つのグループの重複が検出されます。
リストが空になるまで、上記の 2 つの手順を繰り返します。
最良のケースでは N-1 が必要ですが、(N-1)! 最悪の場合。
より良い代替手段は何ですか?
上記で説明した方法を使用した私のコード:
以下の回答に感謝しますが、私の例では整数に関するものであると誤解されているようです。実際、要素はタイプにとらわれず (整数、文字列、またはその他の POD である必要はありません)、等しい述語は自己定義されます。つまり、比較は非常に重くなる可能性があります。
したがって、おそらく私の質問は次のとおりです。どのデータ構造とアルゴリズムを使用すると、比較が少なくなります。
multiset のような事前に並べ替えられたコンテナーを使用すると、私のテストによると multimap は良くありません。
- 挿入中のソートはすでに比較を行っています。
- 次の隣接する発見は再び比較を行い、
- これらのデータ構造は、等しい演算よりも小さい演算を優先し、2 つのより小さい演算を実行します (a
比較を保存する方法がわかりません。
以下のいくつかの回答で無視されているもう1つのことは、重複したグループをコンテナに保持するだけでなく、互いに区別する必要があることです。
結論
いろいろ話し合った結果、3つの方法があるようです
- 上記で説明した私の元の素朴な方法
- のような線形コンテナーから開始し
std::vector
、並べ替えてから、等しい範囲を見つけます - のような関連するコンテナから始めて、
std::map<Type, vector<duplicates>>
Charles Bailey の提案に従って、関連するコンテナのセットアップ中に重複を選択します。
以下に投稿されているように、すべてのメソッドをテストするサンプルをコーディングしました。
複製の数とそれらがいつ配布されるかは、最良の選択に影響を与える可能性があります。
- 方法 1 は、先頭で激しく落下する場合に最適であり、最後に落下する場合は最悪です。並べ替えは分布を変更しませんが、エンディアンを変更します。
- 方法 3 のパフォーマンスが最も平均的です
- 方法 2 は決して最良の選択ではありません
議論に参加してくれたすべての人に感謝します。
以下のコードからの 20 個のサンプル項目を含む 1 つの出力。
[ 20 10 6 5 4 3 2 2 2 2 1 1 1 1 1 1 1 1 1 ] でテスト
および [ 1 1 1 1 1 1 1 1 1 2 2 2 2 3 4 5 6 10 20 ] それぞれ
std::vector を使用 -> sort() -> neighbor_find():
比較: [ '<' = 139, '==' = 23 ]
比較: [ '<' = 38, '==' = 23 ]
std::list を使用 -> sort() -> リストを縮小:
比較: [ '<' = 50, '==' = 43 ]
比較: [ '<' = 52, '==' = 43 ]
std::list を使用 -> リストを縮小:
比較: [ '<' = 0, '==' = 121 ]
比較: [ '<' = 0, '==' = 43 ]
std::vector を使用 -> std::map>:
比較: [ '<' = 79, '==' = 0 ]
比較: [ '<' = 53, '==' = 0 ]
std::vector を使用 -> std::multiset -> neighbor_find():
比較: [ '<' = 79, '==' = 7 ]
比較: [ '<' = 53, '==' = 7 ]
コード