簡體   English   中英

在 c# 中表示此查找表的最佳方式

[英]best way to represent this lookup table in c#

我需要在 C# 中表示一個查找表,這里是基本結構:

Name    Range   Multiplier

Active  10-20   0.5

你們有什么建議?

我將需要查找范圍並檢索乘數。 我還需要使用名稱進行查找。

更新它總共可能有 10-15 行。 范圍是 integer 日期類型。

您實際擁有的是兩個查找表:一個按名稱,一個按范圍。 有幾種方法可以在 memory 中表示這些,具體取決於表的大小。

最可能適合“按名稱”查找的是字典:

var MultiplierByName = new Dictionary<string, double>() { {"Active",.5}, {"Other", 1.0} };

范圍更棘手。 為此,您可能只想存儲最小或最大項目,具體取決於您的范圍的工作方式。 您可能還需要編寫 function 以將任何給定的 integer 減少為相應的存儲鍵值(提示:使用 integer 除法或 mod 運算符)

從那里你可以選擇另一個字典( Dictionary<int, double> ),或者如果它工作正常,你可以讓你的 reduce function 返回一個連續的 int 並使用List<double> ,這樣你的“鍵”就變成了一個索引。

但就像我說的:要確定什么是最好的,我們真的需要知道 scope 和查找中數據的性質,以及您將用來訪問它的場景。

創建一個 class 來表示每一行。 它將具有 Name、RangeLow、RangeHigh 和 Multiplier 屬性。 創建此類行的列表(從文件中讀取或在代碼中輸入),然后使用 LINQ 對其進行查詢:

from r in LookupTable
where r.RangeLow <= x && r.RangeHigh >= x
select r.Multiplier;

有時簡單是最好的。 我們正在查看多少條目,以及您在示例中似乎暗示的范圍 integer 范圍? 雖然我能想到幾種方法,但首先想到的是維護兩個不同的查找字典,一個用於名稱,一個用於值(范圍),然后將冗余信息存儲在范圍字典中。 當然,如果你的范圍是雙打鍵,或者你的范圍達到數萬,我會在我的書中尋找一些不同的東西,但簡單的規則。

我將使用 DataTable 來實現這一點,假設沒有迫切的理由使用另一種數據類型。 DataTable.Select 可以很好地運行在名稱或范圍上的查找。 為此,您使用 DataTable 確實會損失一些性能,但是如果有 10-15 條記錄,這會很重要。

暫無
暫無

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

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