如何以随机顺序迭代Array / List / IEnumerable的全部UInt32?

时间:2013-10-10 23:06:26

标签: c# uint32

我尝试了几种方法,但却找不到我需要的东西。

我的目标:使用UInt32的每个可能值运行一个函数(并记录结果)。

uints的顺序不重要,但我更喜欢非顺序

有什么想法吗?

这些是我尝试过的:

for ( var u = UInt32.MinValue; u < UInt32.MaxValue; u++ ) { Debug.WriteLine( u ); } //works, but sequential

var list = Enumerable.Range( Int32.MinValue, Int32.MaxValue ).Select( i => ( UInt32 ) i );  //works, but sequential

var list = Enumerable.Range( Int32.MinValue, Int32.MaxValue ).OrderBy( o => rnd.Next() ).Select( i => ( UInt32 ) i );  //OutOfMemoryException because of the OrderBy

我也试过分配一个数组,但我没有那个代码atm。它也是OutOfMemoryException&#39; d。

下一个策略我将把UInt32系列分成可管理的块。 之后的下一个策略是填充sql表。

所以是的,我已经考虑过了一些想法,但我希望有人有一个有用的提示。

编辑:Ilya Bursov的想法可能有用......谢谢!

2 个答案:

答案 0 :(得分:1)

也许这样的事情,不是随机的,但至少是非顺序的,涵盖全范围:

UInt32 i = 0;
do
{
    UInt32 newIndex = ((i & 0xffff) << 16) | (i >> 16); // swap 2 high bytes with 2 low bytes
    // do something with element in array at index newIndex
    i++;
} while (i != 0);

答案 1 :(得分:0)

这是按顺序执行的,但这可行:

        for (uint i = UInt32.MinValue; i < UInt32.MaxValue; ++i)
        {
            ...
        }