【发布时间】:2016-04-01 18:24:05
【问题描述】:
我有一个过滤后的音乐标题表,想随机播放它们。我尝试使用 Random,但通常在播放所有其他标题之前播放相同的标题。
我尝试使用洗牌数组(我在这里找到了方法),然后调用 Record 的匹配 AutoInc 值...
procedure Shuffle(anArr : TStringList; aMax : Integer);
var
i: Integer;
begin
Randomize;
for i:=0 to aMax do
anArr.Add(IntToStr(i));
for i := anArr.Count-1 downto 1 do
anArr.Exchange(i,Random(i+1));
end;
但是,由于表格被过滤,AutoInc 不连续。我不想扫描过滤表中所有可用的 AutoInc 值,然后随机播放,除非我真的必须这样做,因为表可能非常大。
有没有什么聪明的方法可以随机随机播放,直到每个标题都播放一次后才重复播放?我尝试在记录中使用布尔字段来指示“已播放”,但随后我不得不扫描整个表格以在下一轮随机播放之前将它们全部清除。
过滤后的表格可能会播放多次,我希望每次完整迭代都有一个新的随机顺序。
【问题讨论】:
标签: delphi arraylist random delphi-5