我有一個 5000 行 * 30 列的 Excel 作業表,我想將它們讀入 C# 程式,然后通過查找行和列標題定期訪問這些值。該程式將在普通筆記本電腦(16GB 記憶體)上運行。我應該使用字典字典來存盤這些資料嗎?如果是這樣,是否更建議創建一個包含 5000 個較小字典的字典,每個字典有 30 個鍵值對(即,行標題將是“外部”字典的鍵,列標題將是“內部”字典的鍵?字典)或 30 個字典,每個字典有 5000 個鍵值對?或者我應該創建一個二維陣列,并將行標題和行索引對以及列標題和列索引對存盤在 2 個較小的字典中?或者我是否需要擔心這么多資料的記憶體/性能問題?
謝謝你。
uj5u.com熱心網友回復:
解釋注釋的示例。
您有一些 N 列 N 行的表格:

您可以創建一個表示一個物件(一個物體)的類:
public class Person
{
}
并用屬性填充它,這對于每個物體(您的 30 列)都是相似的:
public class Person
{
public string Name { get; set;}
public string Surname { get; set;}
public int Age { get; set;}
public string City { get; set;}
public string Gender { get; set;}
// and other of 30 columns
}
因此,表中的每一行都代表某個人(在該示例中)。5000 行 = 我們將有 5000 人。由于它們是相似的物體 - 我們可以將它們存盤為集合或人員。我們可以使用(例如簡單的例子):
Person[]- 人的陣列;List<Person>- 人員名單;
讓我們想象一下,如何從表中讀取資料并從中創建人員串列。
public void ReadTable(Table myTable) // We have Table with Rows and Columns
{
// Initializing our collection of Persons
List<Person> persons = new List<Person>;
// We need to read all 5000 rows, so iterating them
for (int i = 1; i <= myTable.Rows.Count; i ) // myTable.Rows.Count = 5000
{
// Creating a Person
Person person = new Person();
// Reading each cell value, accessing to it through RowIndex & ColumnIndex
// Row 1 Column 1 is Name
string name = myTable.Rows[i].Columns[1].Value.ToString(); // John
// Row 1 Column 2 is Surname
string surname = myTable.Rows[i].Columns[2].Value.ToString(); // Wick
// Row 1 Column 3 is Age
int age = int.Parse(myTable.Rows[i].Columns[3].Value); // 55
// Row 1 Column 4 is City
string city = myTable.Rows[i].Columns[4].Value.ToString(); // New York
// Row 1 Column 5 is Gender
string gender = myTable.Rows[i].Columns[5].Value.ToString(); // Male
//Received from table values we add to a Person:
person.Name = name;
person.Surname = surname;
person.Age = age;
person.City = city;
person.Gender = gender;
// And finally adding Person to a collection (list) of Persons:
persons.Add(person);
// And same would happen with other 5000 rows
}
}
因此,閱讀后您將擁有persons5000 項的串列。您可以操作它們、編輯、添加新的和洗掉現有的 - 無論如何。
uj5u.com熱心網友回復:
根據這個在字典中的元素的存盤器開銷大約是20個位元組。所以 5000 * 30 * 20 = 3000000 位元組,或 3Mb,加上字典物件本身的幾 Kb。
由于這對于現代計算機來說微不足道,因此從記憶體的角度來看可能無關緊要。從性能的角度來看,這也可能無關緊要。
因此,如果您選擇字典字典、鋸齒狀陣列、二維陣列或顯式行物件,則應更多地從最容易使用的替代方法中確定。
如果所有單元格的型別相同,則二維陣列可能是最簡單的選擇。如果型別不同,為每一列創建一個Model或Row類的屬性可能是最有用的,這將有助于提供比簡單的行/列更高級別的抽象。
uj5u.com熱心網友回復:
正如@JonasH 所回答的那樣,任何現代系統都可以處理 5000 行,并且為結構定義模型是一個很好的解決方案。另一方面,您還可以將 Excel 資料加載到DataTable物件中。DataTable 易于使用,它允許以一致的格式將資料集中到其中,嵌入其他允許進行排序、搜索等的屬性。如果將來資料負載會增加,請繼續創建模型。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/312945.html
上一篇:到/來自串列的dict的dict串列,但具有所有可能的排列
下一篇:使用字典更新索引值列
