クロスオーバーと範囲外の値を取得せずに両方の配列をシャッフルすることはできません

リー・ゴブロスキー

シャッフルしたい配列が2つあります。以下に、宣言とシャッフルの例を示します。

var
  highNums : array[1..9] of integer;
  lowNums  : array[1..20] of integer;
begin
  Q := 0;

  for I := 1 to Length(highNums) do
  begin
    highNums[I] := q;
  end;

  for K := 1 to Length(lowNums) do
  begin
    lowNums[K] := q;
  end;


bigNums[] {25 ..225} every 25
lowNumes[] {1..10} two of each number

procedure shuffleHighArray();
var
  I, ToSwapHigh, HighTemp : integer;
begin
  for I := 1 to length(highNums) do
  begin
    toSwapHigh := Random(length(highNums));
    HighTemp := highNums[I];
    highNums[I] := highNums[toSwapHigh];
    highNums[toSwapHigh] := HighTemp;
  end;
end;


procedure shuffleLowArray();
var
  K, ToSwapLow, LowTemp : integer;
begin
  for K := 1 to length(lowNums)  do
  begin
    toSwapLow := random(length(lowNums));
    LowTemp := lowNums[K];
    lowNums[K] := lowNums[toSwapLow];
    lowNums[toSwapLow] := LowTemp;
  end;
 end;

これが、両方の配列の宣言とともに使用しているプロシージャです。
ご協力ありがとうございました

イェンス・ボリスホルト

配列をシャッフルするには、一般的な方法を使用する必要があります。

私はあなたのためにこれを書きました:

uses
  System.Math;

type
  TArrayHelper = class abstract
  public
    class constructor Create;
    class procedure PermuteArray<T>(var A: array of T);
  end;


{ TArrayHelper }

class constructor TArrayHelper.Create;
begin
  Randomize;
end;

class procedure TArrayHelper.PermuteArray<T>(var A: array of T);
var
  Tmp: T;
  i, j: Integer;
begin
  for i := High(A) downto low(A) do
  begin
    j := RandomRange(0, i);
    Tmp := A[i];
    A[i] := A[j];
    A[j] := Tmp;
  end;
end;

あなたがそれをテストしたい場合。フォームにボタンとメモを配置してから、次のコードを試してください。

procedure TForm1.Button1Click(Sender: TObject);
  procedure DisplayArray(A: array of Integer);
  var
    i: Integer;
    s: String;
  begin
    s := '[';
    for i := low(A) to min(10, High(A)) do
      s := s + A[i].ToString + ',';

    s[Length(s)] := ']';
    Memo1.Lines.Add(s);
  end;

var
  i: Integer;
  Nums: array [1 .. 9000] of Integer;
begin
  Memo1.Lines.Clear;

  for i := low(Nums) to High(Nums) do
    Nums[i] := i;

  DisplayArray(Nums);
  TArrayHelper.PermuteArray(Nums);
  DisplayArray(Nums);
end;

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

JavaのMIDIプログラムで楽器を変更することはできません、InvalidMidiDataExceptionをスローは:範囲外チャンネル

分類Dev

.push()を使用せずにグローバル配列に値を割り当てることはできません

分類Dev

DynamoDB:2つのテーブルを作成せずに、ハッシュと範囲でクエリを実行することはできますか?

分類Dev

mongoアグリゲーターで範囲外の値を強制することはできません

分類Dev

コンボリューションレイヤーでバイアスとバッチ正規化の両方を使用することはできません

分類Dev

フォーム内でファイルとオブジェクトの両方を送信することはできません

分類Dev

OpenCVの安価なステレオカメラは両方のストリームを一度にロードすることはできません

分類Dev

複数のオブジェクトセットはサポートされていません。オブジェクトセット「ApplicationUsers」と「Users」の両方に、ロールを作成するときにApplicationUserのインスタンスを含めることができます

分類Dev

「大」のファイルをアップロードすることができません、両方file_exists()とis_uploaded_file()は偽であります

分類Dev

readlines()インデックスの範囲外エラーを使用して2行を同時に読み取ることはできません

分類Dev

フラッターコンテナ:色と装飾の両方を提供することはできません

分類Dev

配列と文字列をループするだけで、インデックスの各値を取得しますが、範囲外の例外です

分類Dev

プログラムがキャリッジリターンまたは改行を見つけることができません。範囲外に戻ります

分類Dev

LaravelキャッシャーとLaravelパスポート-両方の特性を呼び出すことはできません

分類Dev

グリフインデックスとUnicodeStringプロパティの両方を空にすることはできません

分類Dev

両方のオーディオソースをストリーミングすることはできません。マイクのみが機能します。

分類Dev

ある数値を別の配列にコピーしようとしていますが、「インデックスが配列の範囲外でした」というメッセージが表示され続け、理由がわかりません。

分類Dev

ラムダキャプチャリスト:オブジェクト全体をキャプチャしないと、オブジェクトのメンバーフィールドを値でキャプチャすることはできませんか?

分類Dev

スクロールSVGでテキストをアニメーション化します。2つの図形の両方を同時にアクティブにすることはできませんか?

分類Dev

Googleスプレッドシートスクリプト-あるシートから別のシートに範囲をコピーする方法。ただし、空でないターゲットセルを上書きすることはありません。

分類Dev

位置:スティッキーは上と左の両方を機能させることができません

分類Dev

元のブックのすべてのワークシートに動的な列がある静的テーブル!エラー:テーブルを別のテーブルとオーバーラップさせることはできません

分類Dev

pcsは、両方のマシンを同時に起動しているときに、メインノードでフェイルオーバーリソースを開始する前に、パートナーノードのフェイルオーバーリソースを停止しません。

分類Dev

変数を使用してフィールド内の配列メンバーにアクセスすることはできません

分類Dev

サーバーレス紺碧のオフライン:値をnullにすることはできません。(パラメーター 'プロバイダー')

分類Dev

カスタムSharePoint2013 Webパーツは、ポストバックを必要とせずに、コンシューマーとプロバイダーの両方として機能できますか?

分類Dev

リクエストパラメータのいずれかを必須にする方法(そのうちの1つをNULLにすることはできますが、両方にすることはできません)?

分類Dev

文字列インデックスの範囲外を修正するときにすべてのコードをテストしません

分類Dev

contrib.admin.AdminSiteとdjango.contrib.auth.admin.UserAdminの両方を同時にオーバーライドすることはできません

Related 関連記事

  1. 1

    JavaのMIDIプログラムで楽器を変更することはできません、InvalidMidiDataExceptionをスローは:範囲外チャンネル

  2. 2

    .push()を使用せずにグローバル配列に値を割り当てることはできません

  3. 3

    DynamoDB:2つのテーブルを作成せずに、ハッシュと範囲でクエリを実行することはできますか?

  4. 4

    mongoアグリゲーターで範囲外の値を強制することはできません

  5. 5

    コンボリューションレイヤーでバイアスとバッチ正規化の両方を使用することはできません

  6. 6

    フォーム内でファイルとオブジェクトの両方を送信することはできません

  7. 7

    OpenCVの安価なステレオカメラは両方のストリームを一度にロードすることはできません

  8. 8

    複数のオブジェクトセットはサポートされていません。オブジェクトセット「ApplicationUsers」と「Users」の両方に、ロールを作成するときにApplicationUserのインスタンスを含めることができます

  9. 9

    「大」のファイルをアップロードすることができません、両方file_exists()とis_uploaded_file()は偽であります

  10. 10

    readlines()インデックスの範囲外エラーを使用して2行を同時に読み取ることはできません

  11. 11

    フラッターコンテナ:色と装飾の両方を提供することはできません

  12. 12

    配列と文字列をループするだけで、インデックスの各値を取得しますが、範囲外の例外です

  13. 13

    プログラムがキャリッジリターンまたは改行を見つけることができません。範囲外に戻ります

  14. 14

    LaravelキャッシャーとLaravelパスポート-両方の特性を呼び出すことはできません

  15. 15

    グリフインデックスとUnicodeStringプロパティの両方を空にすることはできません

  16. 16

    両方のオーディオソースをストリーミングすることはできません。マイクのみが機能します。

  17. 17

    ある数値を別の配列にコピーしようとしていますが、「インデックスが配列の範囲外でした」というメッセージが表示され続け、理由がわかりません。

  18. 18

    ラムダキャプチャリスト:オブジェクト全体をキャプチャしないと、オブジェクトのメンバーフィールドを値でキャプチャすることはできませんか?

  19. 19

    スクロールSVGでテキストをアニメーション化します。2つの図形の両方を同時にアクティブにすることはできませんか?

  20. 20

    Googleスプレッドシートスクリプト-あるシートから別のシートに範囲をコピーする方法。ただし、空でないターゲットセルを上書きすることはありません。

  21. 21

    位置:スティッキーは上と左の両方を機能させることができません

  22. 22

    元のブックのすべてのワークシートに動的な列がある静的テーブル!エラー:テーブルを別のテーブルとオーバーラップさせることはできません

  23. 23

    pcsは、両方のマシンを同時に起動しているときに、メインノードでフェイルオーバーリソースを開始する前に、パートナーノードのフェイルオーバーリソースを停止しません。

  24. 24

    変数を使用してフィールド内の配列メンバーにアクセスすることはできません

  25. 25

    サーバーレス紺碧のオフライン:値をnullにすることはできません。(パラメーター 'プロバイダー')

  26. 26

    カスタムSharePoint2013 Webパーツは、ポストバックを必要とせずに、コンシューマーとプロバイダーの両方として機能できますか?

  27. 27

    リクエストパラメータのいずれかを必須にする方法(そのうちの1つをNULLにすることはできますが、両方にすることはできません)?

  28. 28

    文字列インデックスの範囲外を修正するときにすべてのコードをテストしません

  29. 29

    contrib.admin.AdminSiteとdjango.contrib.auth.admin.UserAdminの両方を同時にオーバーライドすることはできません

ホットタグ

アーカイブ