簡體   English   中英

C#多維數組,ArrayList或哈希表?

[英]C# multi-dimensional array, ArrayList, or hash table?

我正在試圖弄清楚如何構建一個多維“數組”:

  • 靈活的尺寸
  • 使用2把鑰匙
  • 第一個鍵是int(靈活)
  • 第二個鍵是字符串(種類有限)

用途如下:

console.writelen(array[0]["firstname"]);
console.writelen(array[0]["lastname"]);
console.writelen(array[0]["phone"]);

console.writelen(array[1]["firstname"]);
console.writelen(array[1]["lastname"]);
console.writelen(array[1]["phone"]);

.....
.....

console.writelen(array[x]["firstname"]);
console.writelen(array[x]["lastname"]);
console.writelen(array[x]["phone"]);

你確定創建一個包含數據的類/結構是不合適的嗎? 例如:

class Person
{
    public string FirstName
    {
        get;
        set;
    }

    public string LastName
    {
        get;
        set;
    }

    public string Phone
    {
        get;
        set;
    }
}

然后你只需創建一個Person數組:

var array = new Person[1];
array[0] = new Person() { FirstName = "Joe", LastName = "Smith", Phone = "foo" };

或者,既然你說“靈活的大小”,也許你想要一個列表:

var list = new List<Person>();
list.Add(new Person());

更新 :第一個示例中用於設置array[0]的語法是對象初始值設定項 ; 以下兩個片段大致相同:

var foo = new Person();
foo.FirstName = "John";

var bar = new Person() { FirstName = "John" };

所以是的,如果你願意的話,你可以調用list.Add(new Person() { ... }) 在這種情況下,您還可以使用集合初始值設定項:

var john = new Person() { FirstName = "John" };
var joe = new Person() { FirstName = "Joe" };
var list = new List<Person>() { john, joe };

你可以簡單地使用這個:

Dictionary<int, Dictionary<string, string>>

像這樣使用它:

var dd = new Dictionary<int, Dictionary<string, string>>();
dd[5] = new Dictionary<string, string>();
dd[5]["a"] = "foo";

您還可以創建一個新類來簡化內部字典的創建:

class DDict { // optional: generic
    private readonly Dictionary<int, Dictionary<string, string>> _Inner = new ...;

    public Dictionary<string, string> this (int index) {
        Dictionary<string, string> d;
        if (!_Inner.TryGetValue(index, out d)) {
             d = new Dictionary<string, string>();
             _Inner.Add(index, d);
        }
        return d;
    }
}

var dd = new DDict();
dd[5]["a"] = "hi";

如果第一個索引是順序的,你當然也可以只使用一個字典數組:

var dd = new Dictionary<string, string>[128];

此外,如果內部成員始終相同,我建議創建一個新類並在數組中訪問它:

class Dat {
    string name;
    string phone;
}
var list = new Dat[128]

// access:
list[5].name = "matt";

在這種情況下,您也可以使用ListDictionary<int, Dat>而不是數組。

我不相信你可以用數組做這個,除非你有一個KeyValuePair <int,string>的數組,但我認為你真的想要一個Dictionary <int,string>。

var dic = new Dictionary<int,string>();
dic[0] = "zero";
dic[1] = "one";
dic[2] = "two";

foreach(KeyValuePair<int,string> kvp in dic)
{
   Console.WriteLine(String.Format("Key: {0}, Value: {1}",kvp.Key,kvp.Value);

}

其實我只看到兩個維度。 第一個是行索引,第二個是列索引。 這聽起來像是一個DataTable

暫無
暫無

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

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