C#中關(guān)于List 類的排序


使用背景

在機(jī)器視覺項(xiàng)目中,要對一組視覺坐標(biāo)(x,y)經(jīng)行排序,如N點(diǎn)標(biāo)定的時(shí)候。如下圖:


圓點(diǎn)標(biāo)定

我們需要對圖是黑色圓點(diǎn)的中心坐標(biāo)進(jìn)行:先按x升序排序,再按y經(jīng)行降序排序。經(jīng)過兩輪排序后,我們將會(huì)得到一組有序的坐標(biāo)點(diǎn)集。

如何使用

關(guān)鍵代碼如下:

class VistionPosition

? ? {

? ? ? ? public VistionPosition(double _x, double _y)

? ? ? ? {

? ? ? ? ? ? x = _x;

? ? ? ? ? ? y = _y;

? ? ? ? }

? ? ? ? public double x { get; set; }

? ? ? ? public double y { get; set; }

? ? }

List<VistionPosition> lst = new List<VistionPosition>();

lst.Sort((a,b)=>a.y.CompareTo(b.y));//對lst進(jìn)行y升序的排序,關(guān)鍵的表達(dá)式(a,b)

for (int i = 0; i < 3; i++)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? for (int j = 0; j < 3; j++)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? var temp = lst.Take(3).OrderBy(a=>a.x).ToList();//返回前三個(gè)元素,按y

? ? ? ? ? ? ? ? ? ? lst = lst.Skip(3).ToList();

? ? ? ? ? ? ? ? ? ? resultList.AddRange(temp);

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }


總結(jié)

該排序算法可以用于激光標(biāo)定中的N點(diǎn)標(biāo)定,可以做到一鍵標(biāo)定。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容