我有一个过滤的音乐标题表,并希望随机播放它们。我尝试使用随机,但通常在所有其他游戏播放一次之前播放相同的游戏。
我尝试使用一个混洗数组(我在这里找到了这个方法)然后调用了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不是连续的。我不想扫描Filtered Table以获取所有可用的AutoInc值,然后将其洗牌,除非我真的需要,因为Table可能非常大。
是否有任何聪明的方法可以随机播放播放,直到每个标题播放一次才会重复播放?我尝试在记录中使用布尔字段来表示"播放,"但是在接下来的一轮洗牌之前我必须扫描整个桌子以清除它们。
过滤表可能会被多次播放,并且我希望每次完整迭代都有一个新的洗牌顺序。
答案 0 :(得分:1)
为什么不简单地为非过滤表分配增量值,然后创建这些值的混洗数组?您之后要做的就是在播放下一首歌之前检查该歌曲是否适合所设置的过滤器。如果没有,你跳到下一个。
可能的优势:
可能的缺点:
答案 1 :(得分:0)
只需使用过滤数据集中的AutoInc
字段值(而不是连续索引)填充<div>
,然后随机播放列表。