2つの配列で共通の要素を見つける

ジョニー

次のような型を宣言しました。

type
  TLikes = record
    Name            : string[20];
    favColours  : array of string[20];

  faves     = array of TLikes;

レコードにデータが入力されたら、それらをバイナリファイルに保存して、構造が次のようになるようにします。

[John],     [Green]     [White]     [Blue]
[Paul],     [Blue]      [Red]       [White]     [Green]
[David],    [Red]       [Blue]      [Green]
[Bob],      [White]     [Blue]
[Peter],    [Blue]      [Green]     [Red]

たとえば、Davidが好きな色を見つけるのは簡単です。青が好きな人を知りたいときに小さな問題が発生します。だから私がやったことは、次のように2番目のファイルを作成することです…

[Blue],     [John]      [Paul]      [David]     [Peter]         [Bob]
[Red],      [David]     [Paul]      [Peter]
[White],    [Bob]       [David]     [John]      [Paul]
[Green],    [John]      [David]     [Paul]      [Peter]

しかし、何かが私に言っています、私は実際に2番目のファイル/データ構造を作成する必要はないはずです、それはただ非効率的であるように見えます。

ここにもっと大きな問題があります…。

デビッドが好きなものの任意の組み合わせが好きな人を見つける必要がある場合はどうなりますか?私の結果は…

Blue and red and green  =   Paul, David, Peter
Blue and red            =   Paul, David, Peter
Blue and green          =   John, Paul, David, Peter
Red and Green           =   Paul, David, Peter

私の質問はです。

ボブとポールの共通点(青と白)または赤と白の共通点(デビッドとポール)を把握できるように、データ/レコードを構造化するためのより良い方法はありますか?

上記の例を単純化しようとしたことを指摘する必要があると思います。実際には、Tlikes.Nameのデータは次のような文字列になります…

‘decabbadc’
‘bacddbcad’
‘eebadeaac’

これらの文字列は200k以上のオーダーのものがあります。また、Tlikes.FavColoursデータはファイル名です(これらのファイルは約2kあります)。ファイル名は、Tlikes.Name文字列を含むファイルを示します。

Tlikes.Name文字列を指定したファイル名のリストまたはファイル名を指定した文字列のリストを取得できるようにしたい。

注意–何かが私を「セット」に引き寄せていますが、私が理解していることからすると、セット内の要素の数に制限があります。私は正しい方向に進んでいますか?

投稿をお読みいただき、ありがとうございます。

ヨハン

ここでは多対多の関係を扱っています。
データベースの場合、3つのテーブルを配置することを意味します。

1. People
2. Colors
3. Link table between 1 and 2

データベースを利用して問題を修正するか、データベースの場合と同じようにDelphiでモデル化することをお勧めします。

Delphi構造の使用
さらに使用shortstring停止します。これらは古く、ロングストリングに比べてメリットはありません。
3つのテーブルを使用すると、色ごとの人と人ごとの色のリストをすばやく取得できます。

仕組みは次のとおりです。

TPerson = record
  name: string;
  other_data....
end;

TPeople = array of TPerson;

TFavColor = record
  name: string;
  other_data....
end;

TFavColors = array of TFavColor;

TPersonColor = record
  PersonIndex: Cardinal;  <<-- index into the TPeople array
  ColorIndex: Cardinal;   <<-- index into the TFavColors array
end;

TPersonColors = array of TPersonColor;

これで、TPersonColors配列をループして、データを抽出できます。

データベースの使用
SQLでは、データにインデックスが付けられるため、さらに高速になります(外部キーには常にインデックスが付けられます(すべきです))。

SQLステートメントは、青と赤が好きなすべての人がどのように見えるかを確認します(ここではMySQL構文を使用)。

SELECT p.name  
FROM person p
INNER JOIN personcolor pc ON (pc.person_id = p.id)
INNER JOIN color c1 ON (pc.color_id = c1.id)
INNER JOIN color c2 ON (pc.color_id = c2.id)
WHERE c1.name = 'red' AND c2.name = 'blue'
GROUP BY p.id <<-- eliminate duplicates (not sure it's needed)

Delphiを使用して、データベースをアプリにリンクするのは簡単です。
それが私がお勧めするルートです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

2 つの配列で共通の要素を見つける方法は?

分類Dev

2つの配列間の共通要素の数を見つける

分類Dev

Matlab、2つのセル配列の共通要素を見つける

分類Dev

2つの文字列配列間で共通でない要素を見つける

分類Dev

jqueryで2つの配列間でのみ共通要素を見つける方法

分類Dev

2つの配列で共通の正確な要素を見つける

分類Dev

複数の配列で共通の要素を見つけるphp

分類Dev

単一の配列の要素間の共通部分を見つける

分類Dev

2つの配列で共通の要素を見つけるためのJavascriptプログラム

分類Dev

ループなしで2つの配列間で共通の要素を見つける

分類Dev

HashSetを使用して、2つのComparable配列で共通の要素を見つける方法は?

分類Dev

Java、2つの配列の共通部分を見つける

分類Dev

Javaでn個の配列間の共通要素の合計を見つける

分類Dev

PHPの2つの配列内で共通の値を見つける

分類Dev

Javaで2つの配列間の共通の最小値を見つける

分類Dev

すべての配列に共通する要素を見つける

分類Dev

N個の配列で共通の値を見つける

分類Dev

Pythonで2つの要素を持つ配列の平均を見つける方法は?

分類Dev

numpyの2つの配列で要素のペアの場所を見つける

分類Dev

Pythonのdictの2つのリストで共通の要素を見つける

分類Dev

2つのファイルから2行で共通の要素を見つける

分類Dev

Java2つの配列の相互要素を見つける

分類Dev

2つのリストの共通要素を見つける方法は?

分類Dev

単一の2D配列の行間で共通の要素を見つけようとしています

分類Dev

2つのBash配列に共通するアイテムを見つける

分類Dev

2つのデータフレームで共通の要素を見つける

分類Dev

2つのリストですべての共通要素を見つける

分類Dev

Javaでバイト配列のN個のリストから共通の要素を見つける

分類Dev

反応で2つのオブジェクト配列の共通のプロパティ値を見つける

Related 関連記事

  1. 1

    2 つの配列で共通の要素を見つける方法は?

  2. 2

    2つの配列間の共通要素の数を見つける

  3. 3

    Matlab、2つのセル配列の共通要素を見つける

  4. 4

    2つの文字列配列間で共通でない要素を見つける

  5. 5

    jqueryで2つの配列間でのみ共通要素を見つける方法

  6. 6

    2つの配列で共通の正確な要素を見つける

  7. 7

    複数の配列で共通の要素を見つけるphp

  8. 8

    単一の配列の要素間の共通部分を見つける

  9. 9

    2つの配列で共通の要素を見つけるためのJavascriptプログラム

  10. 10

    ループなしで2つの配列間で共通の要素を見つける

  11. 11

    HashSetを使用して、2つのComparable配列で共通の要素を見つける方法は?

  12. 12

    Java、2つの配列の共通部分を見つける

  13. 13

    Javaでn個の配列間の共通要素の合計を見つける

  14. 14

    PHPの2つの配列内で共通の値を見つける

  15. 15

    Javaで2つの配列間の共通の最小値を見つける

  16. 16

    すべての配列に共通する要素を見つける

  17. 17

    N個の配列で共通の値を見つける

  18. 18

    Pythonで2つの要素を持つ配列の平均を見つける方法は?

  19. 19

    numpyの2つの配列で要素のペアの場所を見つける

  20. 20

    Pythonのdictの2つのリストで共通の要素を見つける

  21. 21

    2つのファイルから2行で共通の要素を見つける

  22. 22

    Java2つの配列の相互要素を見つける

  23. 23

    2つのリストの共通要素を見つける方法は?

  24. 24

    単一の2D配列の行間で共通の要素を見つけようとしています

  25. 25

    2つのBash配列に共通するアイテムを見つける

  26. 26

    2つのデータフレームで共通の要素を見つける

  27. 27

    2つのリストですべての共通要素を見つける

  28. 28

    Javaでバイト配列のN個のリストから共通の要素を見つける

  29. 29

    反応で2つのオブジェクト配列の共通のプロパティ値を見つける

ホットタグ

アーカイブ