如何从Arraylist中获取数据

时间:2011-06-01 20:19:08

标签: c# arraylist

所以在previous quesiton中,我问我如何将多个数组列表合并到一个数组列表中。

This answer工作(也在下面列出)。但是,我在记录中遇到问题。如何从这个多维arraylist中获取数据。例如,如果我想获得地址怎么办?

ArrayList Names = new ArrayList(); 
ArrayList Phone = new ArrayList(); 
ArrayList Address = new ArrayList(); 
ArrayList res = new ArrayList();  
for(int i=0; i<Names.Count; i++) 
{   
  res.Add(new string[]{Names[i].ToString(), Phone[i].ToString(), Address[i].ToString()}); 
} 

4 个答案:

答案 0 :(得分:6)

您可以执行以下操作...我想确保并且我注意到,如果可以的话,您可能想要提供更好的数据结构或容器类。

string someAddress = ((string[])res[0])[2];

在这个例子中,我们将对象(字符串数组)放在res的第一个索引处,然后索引到存储地址的字符串数组中。

您可以考虑类似以下内容,但要包含带有类型列表的数据..

public class Person
{
    public string Name { get; set; }
    public string Phone { get; set; }
    public string Address { get; set; }
}

...

List<Person> people = new List<Person>();
people.Add(new Person() { Name = "Not Me", Phone = "(555) 212-1234", Address = "123 Fake St." });

string address = people[0].Address;

答案 1 :(得分:1)

就个人而言,我会把它变成一个结构。

public struct Record
{
  public String Name;
  public String Telephone;
  public String Address;
}

将信息推送到结构中,然后重新引用它们。类似的东西:

ArrayList records = new ArrayList();
for (...) {
  records.Add(new Record(){
    Name = Names[i].ToString(),
    Telephone = Phone[i].ToString(),
    Address = Address[i].ToString()
  });
}
...
Console.WriteLine(records[0].Address);

答案 2 :(得分:1)

假设这是.NET 2.0,而不是以后任何事情,所以你必须坚持使用ArrayList,我只会介绍一个新类来保存你的信息。

public class Person
{
    private string _name;
    public string Name { get { return _name; } }
    public Person(string name, string phone, string adress)
    {
        _name = name;
        ...
    }
}

然后,您可以在arraylist中填充此类的实例并访问其属性。

答案 3 :(得分:1)

我可以问你为什么要创建像你这样的数组列表吗?在我看来,您最好创建一个具有3个属性的自定义对象 - &gt;名称,电话和地址,只需创建这些对象的列表:

驻地班级:

public class Resident
{
  public string Name { get; set; }
  public string Phone { get; set; }
  public string Address { get; set; }
}

代码:

List<Resident> residents = new List<Resident>();
// populate list

foreach (var res in residents)
  Console.WriteLine(res.Address);