问题标签 [shuffle]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
213 浏览

algorithm - 洗牌组算法

我需要一个像 foobar2k 一样的音频播放器的“随机播放专辑”算法。所以问题是:我有一个曲目列表,根据某些标准排序,以便具有相同专辑的曲目都是相邻的。现在我需要能够以“随机专辑”模式播放播放列表中的歌曲,也就是说,如果下一首曲目来自同一张专辑,则直接播放,否则,转到下一张随机专辑的第一首曲目。如果用户想要播放上一首曲目,请执行相同的操作,但要向后播放。所以问题是:我怎么知道上一张专辑是什么?我真的不想保留已播放专辑的历史记录,也不想保留单独的列表。

目前,我通过给每个轨道随机洗牌索引来实现常规洗牌模式,这样我就可以通过找到最大洗牌索引小于当前和最小洗牌索引大于当前的轨道来找到上一个和下一个轨道。但它不适用于随机播放专辑模式。有人可以帮我吗?

样本输入:

假设当前曲目是曲目 1,专辑 A。下一首曲目将是曲目 2,专辑 A。下一首曲目不是来自同一张专辑,因此应选择随机专辑中的第一首曲目,假设曲目 1,专辑 C . 我现在正在做的是选择下一首曲目,就好像它是常规的随机播放模式一样,然后转到专辑的第一首曲目,从而丢失了我从哪里来到这张专辑的信息。所以当用户想要去上一张专辑时,我不知道我是如何到达那里的。希望这使问题更清楚。

谢谢你。

0 投票
1 回答
18271 浏览

java - 使用 Java 打乱单词

我想打乱一个字符串,使它不可读,所以想出了这个方法:

所以我首先将字符串转换为 char 数组,在我的方法中我必须复制 char 数组“dummywordarray”。通过这个算法,单词的每个字母都会改变位置。但它不会被打乱得很好,从某种意义上说,你一眼就能把它重新组合起来。所以我通过该方法传递了一个少于 9 个字符的给定字符串 7 次,并且这些单词被打乱得相当好,即不可读。但是我用一个 30 个字符的字符串尝试了它,它经过了 500 次传递,然后我才能保证它被很好地打乱了。500!我确信有更好的算法,我想要一些关于 a) 改进此方法或 b) 更好方法的建议。

0 投票
4 回答
351 浏览

math - 重新排序数字

我有 1-62 范围内的数字我希望能够“加密”它们,因此很难猜测它们是按某种顺序生成的。

所以,应该是一些映射,例如

1->35 2->19 3->61 ...

这样我就有了 1 对 1 的映射,100% 可逆。


我可以对映射进行硬编码,但我更喜欢数学解决方案,某种以数字为参数的公式,并产生 1-62 范围内的数字,并且不会生成重复项。这个公式有没有可能存在?


仅用于历史,验证脚本:

更新:

以下是由于这些答案而生成的 ID:

亲爱的:-)

0 投票
1 回答
149 浏览

objective-c - 在 Objective-C 中链接来自三个不同数组的元素

我正在尝试制作一个学习阿拉伯语的配对游戏。我已经从 3 个 plist 中填充了 3 个不同的数组,并且我正在使用 UIPicker 来显示信息。在数组的填充和向 UIPickerView 的传输之间,我对数组的元素进行了洗牌。不幸的是,这导致我忘记了数组中项目的初始索引。我需要能够调用每个元素的初始索引以检查匹配项,因为 plist 中的每个元素都以相同的顺序列出(使用不同的语言)。

我使用以下洗牌算法:

}

}

和以下初始化:

有什么建议么?任何帮助都感激不尽 :]

0 投票
4 回答
7252 浏览

java - 在Java中洗牌一个二维数组

我正在尝试在 Java 中对 2D 对象数组进行洗牌。我认为 Collections.shuffle 可以解决问题,但看起来它只会随机播放每一行中的对象,但不会将行混合在一起,这是我想要的。任何可以为我打乱二维数组的内置方法或易于实现的方法?数组是cards[13][4]

0 投票
7 回答
1626 浏览

c# - 如何在c#中保持内部顺序的同时将2个排序的列表合并到一个随机列表中

我想生成一个混洗合并列表,以保持列表的内部顺序。

例如:

列表 A:11 22 33

清单 B:6 7 8

有效结果:11 22 6 33 7 8

无效结果:22 11 7 6 33 8

0 投票
17 回答
163132 浏览

python - 更好的方法来统一打乱两个 numpy 数组

我有两个不同形状的 numpy 数组,但长度相同(前导维度)。我想对它们中的每一个进行洗牌,以使相应的元素继续对应——即根据它们的前导索引统一洗牌。

此代码有效,并说明了我的目标:

例如:

然而,这感觉笨重、低效且缓慢,并且需要制作数组的副本——我宁愿将它们就地洗牌,因为它们会很大。

有没有更好的方法来解决这个问题?更快的执行和更低的内存使用是我的主要目标,但优雅的代码也会很好。

我的另一个想法是:

这行得通......但它有点可怕,因为我看不到它会继续工作 - 例如,它看起来不像保证在 numpy 版本中存活的那种东西。

0 投票
3 回答
1963 浏览

python - Python中数百万个元素的随机列表有效

我已经阅读了这个答案,这可能是在 Python 中随机化字符串列表的最佳方式。我只是想知道这是否是最有效的方法,因为我通过以下代码获得了大约 3000 万个元素的列表:

如果有更有效的方法可以做到这一点,我将不胜感激有关如何做到这一点的任何建议。

谢谢,

0 投票
6 回答
1791 浏览

java - 播放列表随机播放开/关

我正在用java编程,但我也可以采用C++(甚至伪)代码,没问题。这就是我所在的位置:

我有类似播放列表的东西,例如List<MyPlayListItem> lsMyPlaylist. 现在我想让用户有机会洗牌,然后再回到有序列表。我的意思是,假设用户处于“随机播放模式”,播放器例如从第 7 首歌曲跳到第 5 首,但随后用户关闭了“随机播放模式”,因为他接下来想听第 6 首歌曲。你会如何处理这个问题?

我有几个想法:

  • 使用两个列表,一个是原始的,一个是随机的(存储太多)
  • 有一个 int 列表,我将其打乱,然后用作索引来获取元素(可能会好一点)
  • 使用哈希表(解决方案?不过,我可能需要一些建议)

哦,这不是家庭作业(我希望我又是那个年龄:-D)。

编辑:

我刚刚完成了这样的实现:

但是现在,我正在考虑类似的事情:

不确定这个......仍然需要建议。如果我指定列表中的对象,我什至可以实现列表吗?嗯……

0 投票
1 回答
268 浏览

c# - 给定一个字符串数组,对它们进行随机排序的最简单方法是什么?

我想出的是:

有没有其他方法,也许使用 aDictionary或什么?谢谢。