我需要創建一個有許多行和兩列以上的表格。建議一個好的和快速的數據結構。我不會更新和刪除該表中的一些條目。我將只使用查找功能。
例如,我有一個表:
表的數據結構?
| column 1 | column 2 | column 3| a | asd | awd | asfc | b | asgf | aasf | asgfc |
我有:
String a = "column 1" String b = "b" String c = find(a,b);
在結束在c
的值應爲asgf
。
我需要創建一個有許多行和兩列以上的表格。建議一個好的和快速的數據結構。我不會更新和刪除該表中的一些條目。我將只使用查找功能。
例如,我有一個表:
表的數據結構?
| column 1 | column 2 | column 3| a | asd | awd | asfc | b | asgf | aasf | asgfc |
我有:
String a = "column 1" String b = "b" String c = find(a,b);
在結束在c
的值應爲asgf
。
您必須使用基於散列表的關聯數組(所謂的字典)。查找的平均時間複雜度 - 最差情況下爲O(1 + n/k)和O(n)。您必須將表格組織爲列的字典(列名稱爲鍵)。和列必須是值的字典(與行的名稱爲重點)
更多信息:
http://en.wikipedia.org/wiki/Dictionary_(data_structure) http://en.wikipedia.org/wiki/Hash_table
實例C#:
using System;
using System.Collections;
using System.Collections.Generic;
namespace Test {
public class Test
{
class Table {
class Column {
public Dictionary<string, string> cells;
public Column() {
cells = new Dictionary<string, string>();
}
public string Find(string rowName) {
string resultValue;
if (cells.TryGetValue(rowName, out resultValue))
return resultValue;
else
throw new Exception("oops, no such cell");
}
}
Dictionary<string, Column> columns;
List<string> rowNames;
public Table() {
columns = new Dictionary<string, Column>();
rowNames = new List<string>();
}
public void AddColumn(string columnName, params string[] values) {
Column column = new Column();
columns.Add(columnName, column);
// fill new cells
int counter = 0;
foreach (string rowName in rowNames) {
if (counter < values.Length)
column.cells.Add(rowName, values[counter]);
else
column.cells.Add(rowName, "");
counter++;
}
}
public void AddRow(string rowName, params string[] values) {
rowNames.Add(rowName);
// fill new cells
int counter = 0;
foreach (KeyValuePair<string, Column> columnPair in columns) {
Column column = columnPair.Value;
if (counter < values.Length)
column.cells.Add(rowName, values[counter]);
else
column.cells.Add(rowName, "");
counter++;
}
}
public string Find(string columnName, string rowName) {
Column resultColumn;
if (columns.TryGetValue(columnName, out resultColumn))
return resultColumn.Find(rowName);
else
throw new Exception("oops, no such cell");
}
}
public static void Main()
{
Table table = new Table();
table.AddRow("a");
table.AddRow("b");
table.AddColumn("column 1", "asd", "asgf");
table.AddColumn("column 2", "awd", "aasf");
table.AddColumn("column 3", "asfc", "asgfc");
Console.WriteLine(table.Find("column 1", "b"));
}
}
}
P.S:示例不能添加重複的行和列 –
當您爲每個單元格和行分配非常大的對象時,看起來效率不高。另外,你在任何地方複製列名稱(如鍵)。我寧願創建一個具有列名內部數組的類和記錄列表的列表。而且該列表可以很容易地換成矢量或鏈接列表,以加快查找速度。 –
這完全取決於數據你將要存儲。你需要提供更多關於你想要做什麼的信息。 – Config
你會查找什麼? –
那些將字符串 –