2015-08-14 42 views
2

這是情況。很長的名單和搜索最近的元素

我有一個包含一些對象:

  • 起始long
  • 結束long
  • 一個string代碼

這些對象longs是連續的。 例如:

var obj1 = new {From = 0, To = 16777215, Code = "aaa"}; 
var obj2 = new {From = 16777216, To = 16777471, Code = "bbb"}; 

有這樣幾乎150.000對象。

目前我將所有內容都存儲在SQL表中。

問題是我需要從這個列表中搜索。例如,我需要查找編號爲16777470的對象,該對象將是對象2「bbb」。

問題:有沒有一種有效的方式來存儲這麼多的對象在內存中,並能夠尋找其中的元素,擁有很長的時間並尋找最接近的元素?

+4

在排序列表上,二進制搜索可以工作。 – Eser

+1

即使對象平均爲50個字節,總共也少於8MB:將適合許多當代CPU的緩存。 IE瀏覽器。不是很大。 – Richard

+1

它在內存上需要有必要嗎?因爲在SQL上有效的方法。 – JuanK

回答

0

從記憶效率的角度來看,我不確定。

思考:你當然不希望搜索整個列表,所以可能需要某種二級結構(某種索引或查找????)。

無論如何,我偶然發現了這一點: How to get the closest number from a List<int> with LINQ?

懷疑這個方法可能會有點處理器密集型的,因爲它沒有一個次要指標。

希望這會有所幫助。

1

如果對象是連續的,那麼您只需要存儲'from'編號。

var obj1 = new {From = 0, Code = "aaa"}; 
var obj2 = new {From = 16777216, Code = "bbb"}; 

這樣可以節省內存。

然後,如果所有對象都在一個有序列表中,則二叉排列應該解決高效搜索。

主要表現可能是在第一位設置列表,所以我認爲建議留在SQL數據庫可能是明智的。