[英]How to store tables in C# - What kind of data structure should I use?
一般情況如下:
我從外部設備獲取值,並且必須與它們一起存儲時間戳。 我想以某種有效的方式存儲信息,以便在處理所有內容時使我的生活更輕松。
作為一個簡單的解決方案,我創建了一個存儲一行的類:
public class X
{
public DateTime timestamp;
public double value1;
public double value2;
}
然后,我根據這些對象創建一個列表。
您能否顯示一種更好的處理此類數據的方法?
謝謝!
盡管我會使用屬性而不是公共字段,但這對我來說似乎完全合理。 如果要從外部設備獲取值,則可能要考慮使類型不可變-將所有值傳遞到構造函數中並將它們存儲在只讀字段中。 當類型不可變時,我發現對我的代碼進行推理更容易:)
您關心哪種效率? 您將擁有多少這些價值? 即使這里沒有太多值,我仍可能會使用類而不是結構...我很少創建自己的結構。 再說一次,我只是發現類易於推理(例如,不必擔心裝箱。)而且,這感覺就像是“一組值”,而不是一個通常用於結構(數字等)的不可分值。 。 它只是不覺得自己像一個struct給我。
每個對象都會產生開銷,但是除非您有充分的理由,否則我不會擔心。
編輯:這似乎很重要,但是給所有有意義的名稱。 例如:
public class DeviceReading
{
private readonly DateTime timeStamp;
public DateTime TimeStamp { get { return timeStamp; } }
private readonly double temperature;
public double Temperature { get { return temperature; } }
private readonly double airPressure;
public double AirPressure { get { return airPressure; } }
public DeviceReading (DateTime timeStamp,
double temperature,
double airPressure)
{
this.timeStamp = timeStamp;
this.temperature = temperature;
this.airPressure = airPressure;
}
}
我懷疑您還是會這樣做,但我只是想確保自己可以:)
還有幾件事要考慮:
假設您使用的是.NET的最新版本,則可能要使用DateTimeOffset
而不是DateTime
。 好處是DateTiemOffset
明確表示一個時間點,而DateTime
可以是UTC,本地或未指定。
根據您要獲取的讀數類型(以及讀數的傳達方式),您可能希望使用decimal
而不是double
。 可能不是溫度和氣壓(或任何其他“物理”值)的原因,但是如果您要處理諸如金錢之類的人工值,則decimal
是您的朋友。 鑒於這是從設備讀取的,您可能正在處理物理量,但我認為值得一提。
為了處理閱讀材料,您真的很想研究LINQ。 這很可愛:)
此類型足夠小,假設它是不可變的,您可能要考慮使用結構。 這將減少垃圾收集堆上的負載。
您到底想優化什么? 內存占用量? 閱讀表現? 您將如何讀取數據?
如果您打算將多個X
對象放入一個數組中,建議您將其構造為一個struct
因為它僅包含一些“純舊數據”項(無對象)。 除此之外,這似乎是處理數據的一種直接方法。
您已經做的方式沒有什么特別的錯誤。 (盡管正如其他人所建議的那樣,您應該將字段設為私有,而應使用公共屬性)
通常,決定使用哪種存儲結構的最佳方法是考慮如何使用數據。
例如,如果您知道需要按某種順序處理數據,請考慮使用SortedList。 如果您知道需要直接從某種鍵或索引訪問數據,請使用字典。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.