簡體   English   中英

如何在排序數組中定位點?

[英]How to locate a point in a sorted array?

例如,我有一個排序的數組(網格點):0、1、2、3、4、5

我試圖找到3.3的位置。 它在元素3和4之間,因此結果應為元素3的索引,即3。有任何方法可以做到這一點?

您可以使用List<T>Array默認BinarySearch方法,但是如果未找到完全匹配的內容,如何立即獲取最接近元素的索引並不明顯。 為此,您需要這樣做:

var list = new float[] { 0, 1, 2, 3, 4, 5 };
var idx = Array.BinarySearch(list, 3.3f);
if (idx < 0)
    idx = ~idx;

如果未找到直接匹配項,則方法將返回負數,該負數應用〜運算符后,將為您提供下一個比您要搜索的項目的索引。 在您的情況下,該值為“ 4”,因此索引為“ 4”。 要獲得比您要搜索的項目更小的項目-只需減去1(請注意,索引可以變為-1,然后超出數組的范圍)。 還要注意,如果目標元素大於數組中的所有元素-它(在應用〜運算符之后)將返回數組邊界之外的索引(索引等於數組長度)。 還要注意,array \\ list必須已經排序-這些方法不會為您排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM