如何从左到右对Vector3的位置数组进行排序?

时间:2017-02-21 21:25:42

标签: c# arrays sorting nearest-neighbor

我有一个5000万个Vector3的数组存储在三个浮点数组中。我可以转换为Vector3类型数组。

我希望在Y轴上的C#中将数组从低到高排序。拥有快速有效的流程会很好。我找不到任何针对此类任务的具体例程,我是否缺少一些要搜索的关键字?我是否必须编写一个例程,是否有一个现成的例程?

任何信息都将非常感激。感谢。

1 个答案:

答案 0 :(得分:0)

使用数学版本的数据类别排序方法解决了这个问题:

如果数组值是离散的,或者可以舍入到不到一百万个不同的值,那么可以在一秒内完成1000万个值数组。

对vector3的Z进行排序的例子,它重写了顶点和普通数组,因此有6个重写条目:

function Zsort():IEnumerator{
yield WaitForFixedUpdate( );


        var countarr : int[] = new int[3000] ;      
        var loi = 0   ;
        var hii = 0   ; print("z1sort"); WaitForFixedUpdate() ;
    for ( var i : int = 0; i < sortarr.Length ; i++)
    {
        sortarr [ i ] = 0; //Init sort arrays with zeros
        stepsarr[ i ] = 0; //increment beginning of next section
        countarr[ i ] = 0; //used for keeping track of where to write into section for every int
    }print("z2sort"); WaitForFixedUpdate() ;
    for (  i  = 0; i < v1.Length-3 ; i+=3)
    {
        sortarr[ v1[i+2] ] += 1;    // write all positions to sort arrays
    }print("z3sort"); WaitForFixedUpdate() ;
    var indexcount = 0;//used to accumulate index position 0,10,20,30 if all vals have 10 dupes
    for (  i  = 0; i < sortarr.Length ; i++)// 
    {
        stepsarr[ i ] = indexcount; // write staircase section start positions 
        indexcount += sortarr [ i ];
    }   print("z4sort"); WaitForFixedUpdate() ;
    for (  i  = 0; i < v1.Length-3 ; i+=3)
    {   
        v2[ stepsarr[ v1[i+2] ]*3 + countarr[ v1[i+2] ]*3   ] = v1[i  ];    
        v2[ stepsarr[ v1[i+2] ]*3 + countarr[ v1[i+2] ]*3+1 ] = v1[i+1];
        v2[ stepsarr[ v1[i+2] ]*3 + countarr[ v1[i+2] ]*3+2 ] = v1[i+2];
        n2[ stepsarr[ v1[i+2] ]*3 + countarr[ v1[i+2] ]*3   ] = n1[i  ];    
        n2[ stepsarr[ v1[i+2] ]*3 + countarr[ v1[i+2] ]*3+1 ] = n1[i+1];
        n2[ stepsarr[ v1[i+2] ]*3 + countarr[ v1[i+2] ]*3+2 ] = n1[i+2];

        countarr[ v1[i+2] ] += 1 ;
    }   print("z5sort"); WaitForFixedUpdate() ;
    for (  i  = 0; i < v1.Length ; i+=1) 
    {
        v1[ i ] = v2[ i ];  
        n1[ i ] = n2[ i ];  
    }   print("z6sort"); WaitForFixedUpdate() ;


}