你好我试图在c#中实现排序功能(我想对数组进行排序)
card_codes.sort(function() { return 2 * Math.floor(Math.random()) ? -1 : 1 } );
ActionScript对脚本中的整数数组进行排序,每次首次排序后都以301开头
但是当我尝试在c#中对相同的数组进行排序时,它始终以101
开头这是我如何在c#
中对它进行排序Array.Sort(PlayngCardCodes, (f1, f2) => 0.CompareTo(2 * (int)Math.Floor(rng.NextDouble()) == 0 ? -1 : 1));
任何人都可以告诉我如何完全重写actionscript排序以获得相同的结果吗?
答案 0 :(得分:1)
You should not use a comparison function which might give two different answers for the same input.
如果你想要随机播放,你应该使用a shuffle function,而不是排序。
答案 1 :(得分:1)
ActionScript代码已损坏
Math.random()// will result in a number from 0 to 1 like so
//0.40654489677399397
当您放置任何数字时,它会将其向下舍入。 例如
0.40654489677399397 floored-->0
用其他词语
trace(Math.floor(0.40654489677399397) )// output is 0
总结一下
trace( Math.floor( Math.random() ) )// output is always 0
trace( 2 * Math.floor(Math.random()) ? -1 : 1 ) // output is always 1
我不知道c#但我认为你需要在尝试转换之前修复你的来源
但是,由于ActionScript输出始终为1只是让你的c#函数总是返回1并完成它:)
[编辑]
我跑了一个测试,输出很奇怪。虽然,它不是原始数组可能是由于在AS3中进行的排序类型
var card_codes:Array = new Array(2,467,8,342,37,7,6789,34,234,2)
card_codes.sort(function() { return 2 * Math.floor(Math.random()) ? -1 : 1 } );
trace(card_codes)// output is always 7,2,6789,8,34,37,234,2,342,467