2017-02-21 45 views
0

我有一個5000萬個Vector3的數組存儲在三個浮點數組中。我可以轉換爲Vector3類型的數組。如何對Vector3的位置數組從左到右進行排序?

我希望從低到高在C#在Y軸上對數組進行排序。擁有快速高效的流程將是一件好事。我找不到任何這種任務的具體例程,我缺少一些關鍵字來搜索?我必須寫一個例程嗎,有沒有準備好製作一個?

任何信息將是非常讚賞。謝謝。

+1

使用了在該Y軸比較自定義比較陣列只是排序。內置'Array.Sort'函數已經相當快。另外,通過對數據源進行某種預處理,以預先排序的方式將數據插入到數組中是否可行? –

+0

嗨,這些數據來自空間XYZ空間信息的線性掃描,它包含相當隨機的數據,我不得不重新排序它以便更快地分析它。當我編程合成器時,我們使用了振幅排序算法(稱爲氣泡排序)和那種類型,我會嘗試一些不同的搜索術語來查找一些自定義排序代碼。 –

+0

我建議你嘗試了一個簡單的[的Array.Sort(陣列,IComparer的)](https://msdn.microsoft.com/en-us/library/aw9s5t8f(V = vs.110)的.aspx)和服務,如果性能足夠好。 –

回答

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() ; 


} 
相關問題