首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >遍历项目列表的算法(存储在播放歌曲历史记录中供用户使用的歌曲)

遍历项目列表的算法(存储在播放歌曲历史记录中供用户使用的歌曲)
EN

Stack Overflow用户
提问于 2013-08-29 15:20:12
回答 2查看 336关注 0票数 0

我正在尝试开发遍历数据结构的算法,这些数据结构代表了我的应用程序中的歌曲列表。

这个列表包括我已经演奏过的所有歌曲(我的演奏历史)和我将要播放的其他歌曲。

代码语言:javascript
复制
Something like this (example):
  • H歌1
  • H歌2
  • H宋3
  • H歌4
  • 目前正在播放歌曲
  • 队列5中的Q歌
  • 队列6中的Q歌
  • 队列7中的Q歌
  • 队列8中的Q歌

我需要实现‘以前’和‘下一步’按钮,以便我可以移动我的播放列表。

每一次播放歌曲,它都存储在历史上。

我需要高效的算法(不需要代码,只需要想法或伪代码)来解决用户播放歌曲时的所有用例。

例如,一种情况可以是:

历史上有歌曲1,2和3。现在我们播放歌曲4,在此历史状态之后是1,2,3和4。让我们说,我们点击“先前”按钮再次播放之前播放的歌曲。现在的历史状态是1,2,3,4和3(歌曲3在歌曲4之前播放)。再次单击“前一个”按钮,然后新历史状态为1、2、3、4、3和2。

现在假设我们单击队列中的一些歌曲,例如歌曲6。历史状态为1、2、3、4、3、2和6。单击“前一”按钮现在应该播放歌曲2并将歌曲添加到历史记录的顶部(状态:1、2、3、4、3、2、6、2)。

如果我能开发出一种数据结构来保持我的历史状态,如果我能看到历史的顶端,它会给我以前的歌,那就太好了。

因此,这个数据结构并不适合这个问题。它使历史状态保持清醒,但我不知道如何简单地遍历历史。

如果改变数据结构,可能遍历算法会更简单,但是如何实现这两个请求(考虑了历史信息,并有可能简单地获得先前播放的歌曲)?

非常感谢每一个将在这场讨论中做出贡献的人。这是很好,现在,我需要在http://starvibes.com音乐播放器的算法,这将是‘下一个大事’在我的作品。

EN

回答 2

Stack Overflow用户

发布于 2013-08-29 15:35:47

有两个清单听起来肯定是要走的路-你的历史清单和你的主要清单。

还需要在历史列表中添加一个迭代器。无论何时单击“上一次”或“下一次”,都会减少或增加该迭代器,并获取该迭代器的值。如果您单击一首新歌,请将迭代器重置到列表的后面(最近一次播放)。

每当一首歌开始播放时,将它添加到历史列表中(不管它是一首新歌,还是单击了next或前次)。

示例:(^表示迭代器的位置)

代码语言:javascript
复制
Command   History
--------------------------------
          1, 2, 3
                ^
Play 4
          1, 2, 3, 4
                   ^
Previous
          1, 2, 3, 4, 3
                ^
Previous
          1, 2, 3, 4, 3, 2
             ^
Play 6
          1, 2, 3, 4, 3, 2, 6
                            ^
Previous
          1, 2, 3, 4, 3, 2, 6, 2
                         ^

当我想到像Winamp这样的东西时,您有一个列表,而不是一个队列(意思是您可以选择任何歌曲播放,然后它将继续播放)(除了它也有一个单独的队列,但这不是重点).

除非您使用洗牌模式,否则您可能也希望主列表中有一个迭代器,这将指示最近的新歌(即手动选择的最后一首歌曲,或者在历史列表末尾单击next )。

这将允许您在单击next之后,在历史记录列表的末尾,依次转到主列表中的下一首歌曲。

票数 1
EN

Stack Overflow用户

发布于 2013-08-29 19:37:35

您可以在LinkedList上创建自己的数据结构,例如,每个元素都知道下一个和前一个元素。

存储历史记录、当前元素,然后在此结构中存储下一个元素。当用户播放一首新歌时,您应该能够快速地将它插入列表中。

然后跟踪当前(播放条目)当用户单击前一个,播放currentEntry.previous()当用户单击下一步,播放currentEntry.next()

当用户选择其他歌曲时,在currentEntry和currentEntry.next()之间插入歌曲,然后播放.

干杯

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18514917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档