我有一個javascript數組,我想根據我指定的數字或字符串進行排序。我希望數組看起來是隨機排序的,但是例如,如果輸入爲「6543」,則數組總是排序相同。Javascript:根據輸入的數字對數組進行排序。應該出現隨機排序
3
A
回答
2
使用a shuffle function並用a random number generator where you can set your own seed代替Math.random()
。 然後將您的種子設置爲您的輸入號碼。
0
有了這樣一個小小的種子和陣列,你需要用我的例子來創作。
正如Alex建議的那樣,他提供的網站有一個很好的隨機播放功能。我已經將它與另一個函數結合起來以獲得種子的ascii值。
你應該強烈考慮改變我的例子來散列輸入。否則會有很多碰撞。
下面是代碼:
<script>
// http://sharkysoft.com/tutorials/jsa/content/018.html
function ascii_value (c)
{
// restrict input to a single character
c = c . charAt (0);
// loop through all possible ASCII values
var i;
for (i = 0; i < 256; ++ i)
{
// convert i into a 2-digit hex string
var h = i . toString (16);
if (h . length == 1)
h = "0" + h;
// insert a % character into the string
h = "%" + h;
// determine the character represented by the escape code
h = unescape (h);
// if the characters match, we've found the ASCII value
if (h == c)
break;
}
return i;
}
// http://snippets.dzone.com/posts/show/849
shuffle = function(o,seed){ //v1.0
for(var j, x, i = o.length; i; j = parseInt(seed/(o.length * 255) * i), x = o[--i], o[i] = o[j], o[j] = x);
return o;
};
function seedSort (string){
var charList = string.split('');
var seedValue = 0;
for(var i in charList){
seedValue += ascii_value(charList[i]);
}
return seedValue;
}
document.write(shuffle([0, 1, 2, 3, 4, 5, 6, 7, 8, 9],seedSort("bob")));
document.write("<br>");
document.write(shuffle([0, 1, 2, 3, 4, 5, 6, 7, 8, 9],seedSort("steve")));
document.write("<br>");
document.write(shuffle([0, 1, 2, 3, 4, 5, 6, 7, 8, 9],seedSort("david's house")));
document.write("<br>");
document.write(shuffle([0, 1, 2, 3, 4, 5, 6, 7, 8, 9],seedSort("acorn22")));
</script>
這將產生
8,2,3,4,5,6,7,0,9,1
4,9,3,0,5,6,7,8,1,2
8,0,6,1,5,2,7,3,9,4
4,8,3,0,5,6,7,1,9,2
......其中 「出現」 隨機。我會建議大種子。
3
Javascript本身不提供此功能 - 其RNG不能播種。人們可以採用不同的方法。這是一個。種子必須大於1(或相同的數組將被返回),並且應該大於數組大小以獲得足夠的「隨機性」。
Array.prototype.deterministicShuffle=function(seed){
// A little error handling, whynot!
if(!seed)
throw new Error("deterministicShuffle: seed not given, or 0");
var temp,j;
for(var i=0; i<this.length; i++){
// Select a "random" position.
j = (seed % (i+1) + i) % this.length;
// Swap the current element with the "random" one.
temp=this[i];
this[i]=this[j];
this[j]=temp;
}
return this;
}
// Try it out, Aaron!
alert([0,1,2,3,4,5,6,7,8,9].deterministicShuffle(6543));
alert([0,1,2,3,4,5,6,7,8,9].deterministicShuffle(6544));
alert([0,1,2,3,4,5,6,7,8,9].deterministicShuffle(6545));
相關問題
- 1. 根據出現次數對數組進行升序排序
- 2. 如何根據輸入數組對數組進行排序?
- 3. 根據出現次數對數組進行排序
- 4. 根據輸出對HTML數組排序
- 5. 根據用戶輸入對數組列表進行排序?
- 6. 使用插入排序對輸入數據進行排序
- 7. 對插入的唯一隨機數組進行排序
- 8. 根據常見詞的出現對csv數據進行排序
- 9. 如何根據出現的UNIX數量對行進行排序?
- 10. 當數組輸入到數組時,對數組進行排序
- 11. 根據條件對ArrayList數據進行排序和排序
- 12. 如何根據計算機名稱對輸出進行排序
- 13. 根據票數對人進行排序
- 14. 如何使用相同的隨機排序對兩個數組進行排序
- 15. 排序數據結構:隨機輸入,最低輸出
- 16. 對數組進行排序
- 17. 對數組進行排序
- 18. 隨機數組排序
- 19. 排序隨機數組
- 20. 隨機數組排序
- 21. 根據給定的順序對數組進行排序
- 22. 用JavaScript對數組進行排序時出現錯誤
- 23. 如何根據另一個數組對數組進行排序?
- 24. 根據子數組對數組進行排序count
- 25. 根據另一個數組對數組進行排序,swift
- 26. Javascript:對多維數組進行排序
- 27. 3對已排序的數組進行排序。 O(NlogN)實現
- 28. 根據長度對字符串數組進行排序
- 29. JavaScript - 內部JavaScript排序方法對數字數據進行排序 - True或False?
- 30. 對隨機生成的數組進行排序
你有沒有考慮過使用某種哈希機制? – 2011-03-20 21:01:15