[英]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.