как рандомизировать имена, которые не повторяются? - PullRequest
2 голосов
/ 05 августа 2010

Я хотел бы составить список имен, а затем сделать случайный выбор, но все они должны быть вызваны. Конечно, не повторяется. код Delphi

Ответы [ 5 ]

2 голосов
/ 05 августа 2010

Звучит так, как будто вы хотите перемешать Фишера и Йейтса. Пример кода

1 голос
/ 05 августа 2010

Мое предложение состоит в том, чтобы составить список имен, затем перемешать имя и затем назвать его одно за другим. Я надеюсь, что этот код будет работать для вас.

...
  private
    { Private declarations }
    FNameList : TStringList;
    FNameIndex: Integer;
  public
    { Public declarations }
  end;
...

procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
begin
  Randomize;
  FNameIndex := 0;
  FNameList := Tstringlist.Create;
//  FNameList.LoadFromFile('NameList.txt'); or
  FNameList.Add('Name 1');
  FNameList.Add('Name 2');
  FNameList.Add('Name 3');
  FNameList.Add('Name 4');
  FNameList.Add('Name 5');
  FNameList.Add('Name 6');

  for i:= 1 to 100 do // shuffle 100 times. its up to you
    FNameList.Exchange(Random(FNameList.Count-1), Random(FNameList.Count-1));
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  FNameList.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if FNameIndex < FNameList.Count then
    begin
      showmessage(FNameList.Strings[FNameIndex]);
      inc(FNameIndex);
    end else showmessage('Done!');
end;
0 голосов
/ 05 августа 2010

Скопируйте имена в List и выполните следующее:

// assuming list is a stringlist containing the names
while List.Count > 0 do begin
  idx := Random(List.Count);
  // do something with List[idx]
  List.Delete(idx);
end;
0 голосов
/ 05 августа 2010

Я не в Delphi, но алгоритм довольно прост.Просто вставьте имена в список со случайно сгенерированным индексом.Таким образом, у вас есть случайно отсортированный список имен.Затем просто переберите его.

0 голосов
/ 05 августа 2010

Ну, я не могу доставить вам код Delphi, но у меня совершенно такая же проблема. Я использую список имен (с адресами) с этого сайта http://de.fakenamegenerator.com.

Может быть, это немного поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...