C#多维数组,ArrayList,还是哈希表?
Posted
技术标签:
【中文标题】C#多维数组,ArrayList,还是哈希表?【英文标题】:C# multi-dimensional array, ArrayList, or hash table? 【发布时间】:2011-02-15 08:59:04 【问题描述】:我正在试图弄清楚如何构建一个多维“数组”:
灵活的尺寸 使用 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"]);
【问题讨论】:
【参考方案1】:除非你有一个 KeyValuePair
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);
【讨论】:
哦,抱歉,我没有了解 2 键部分。【参考方案2】:你可以简单地使用这个:
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>
来代替数组。
【讨论】:
【参考方案3】:您确定创建一个类/结构来包含数据不是更合适吗?例如:
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;以下两个sn-ps大致等价:
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 ;
【讨论】:
var list = new List实际上我只看到两个维度。第一个是行索引,第二个是列索引。对我来说,这听起来像是DataTable。
【讨论】:
在这个例子中dotnetperls.com/datatable-foreach如何显示项目标签name,phone而不是“item:”干杯以上是关于C#多维数组,ArrayList,还是哈希表?的主要内容,如果未能解决你的问题,请参考以下文章