Я пытаюсь выяснить, как создать многомерный "массив", который является:
Использование будет похоже:
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());
Update : синтаксис, используемый для установки 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 };
На самом деле я вижу только два измерения. Первый - это индекс строки, второй - индекс столбца. Для меня это звучит как DataTable .
Вы можете просто использовать это:
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";
Вместо массива вы также можете использовать Список
или Словарь
в этом случае.
Я не верю, что вы можете сделать это с помощью массива, если у вас нет единственного массива 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);
}