我正在试图弄清楚如何构建一个多维“数组”:
用法如下:
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"]);
答案 0 :(得分:11)
您确定创建一个包含数据的类/结构更合适吗?例如:
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]
的语法是object initializer;以下两个片段大致相同:
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 };
答案 1 :(得分:4)
你可以简单地使用它:
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";
在这种情况下,您也可以使用List
或Dictionary<int, Dat>
来代替数组。
答案 2 :(得分:0)
我不相信你可以用数组做这个,除非你有一个KeyValuePair&lt; int,string&gt;数组,但我认为你真的想要一个Dictionary&lt; int,string&gt ;.
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);
}
答案 3 :(得分:0)
实际上我只看到两个维度。第一个是行索引,第二个是列索引。这对我来说听起来像DataTable。