我正在做音乐播放器。因此,单击“切换”后,它会随机播放歌曲。而且在我再次单击“切换”后,它应该可以正常播放。
如何再次正常播放歌曲。 (我可以尝试清除数组。然后再次创建相同的数组。它可能会起作用。但是我不知道如何保持最后一首歌)
那么,有没有简单的方法可以再次在普通行中播放歌曲?
var ifshuffled=0
@IBAction func shuffleSwitch(_ sender: Any)
{
ifshuffled += 1
if ifshuffled % 2 == 0
{
//playnormal
}
else
{
songs.shuffle()
}
}
最佳答案
列举您的清单:
let songs = [1, 3, 6, 8, 2, 4, 0]
var enumerated = Array(songs.enumerated())
// [(offset: 0, element: 1), (offset: 1, element: 3), (offset: 2, element: 6), (offset: 3, element: 8), (offset: 4, element: 2), (offset: 5, element: 4), (offset: 6, element: 0)]
enumerated.shuffle()
// [(offset: 1, element: 3), (offset: 4, element: 2), (offset: 2, element: 6), (offset: 5, element: 4), (offset: 0, element: 1), (offset: 6, element: 0), (offset: 3, element: 8)]
enumerated.sort { $0.offset < $1.offset }
// [(offset: 0, element: 1), (offset: 1, element: 3), (offset: 2, element: 6), (offset: 3, element: 8), (offset: 4, element: 2), (offset: 5, element: 4), (offset: 6, element: 0)]
这样,您可以对数组进行随机排序,对索引进行排序,然后再次对其进行随机排序。您也可以保留未打乱的副本,然后从正确的索引重新开始。
另一种方法是创建索引的
Array
,将其洗净,然后遍历它们,然后从Array
中的适当位置选择要播放的歌曲。然后在需要时切换为以递增顺序或其他方式播放歌曲:var playOrder = Array(0..<songs.count)
playOrder.shuffle()
for current in playOrder {
playSong(index: playOrder[current])
}
(当然,我假设您已扩展
Array
以具有shuffle()
方法。)关于arrays - 数组改组后,如何使其再次“改组”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44751934/