-1

背景信息:我正在遍历一个网站集,该网站集以正确的层次顺序存储我要查找的所有网站。当我尝试以嵌套格式显示此信息时,除了同一行格式上的多列之外,我遇到了问题。

我有一个将项目添加到 ArrayList 的 for 循环。我有另一个循环遍历“示例”ArrayList。每次出现“-----”时,我都需要打破或拆分这个 ArrayList。问题是 ArrayList 不支持 .Split(),所以我没有想法。我的总体目标是在嵌套动态列中显示 ArrayList 中的信息,这些动态列基于“-----”的数量。

ArrayList example = new ArrayList();
example.Add("Door");
example.Add("A1"); //nested
example.Add("A2"); //nested
example.Add("-----");
example.Add("House");
example.Add("A1"); //nested
example.Add("A2"); //nested
example.Add("-----");
example.Add("Fence");
example.Add("A1"); //nested
example.Add("A2"); //nested
example.Add("-----");

当我遍历列表时,将构建并显示一个表,如下例所示:

|门| A1 | A2 | 房子 | A1 | A2 | 围栏 | A1 | A2| 

但是,我需要像下面的示例一样显示表中的数据:

|Door| House | Fence| <----This is the desired output that I'm trying to achieve.
|A1  | A1    | A1   | <----This is the desired output that I'm trying to achieve.
|A2  | A2    | A2   | <----This is the desired output that I'm trying to achieve.

任何帮助,将不胜感激。

4

5 回答 5

3

我会这样做:

class Thing {
    public string name;
    public string a;     // This may also be a List<string> for dynamic Add/Remove
    public string b;
    // ...

    public Thing(string Name, string A, string B) {
        name = Name; a = A; b = B;
    }
}

用法:

List<Thing> things = new List<Thing>();
things.Add(new Thing("Fence", "A1", "A2"));
things.Add(new Thing("Door", "A1", "A2"));
// ...

我总是使用一个类来存储一堆属于一起的信息。最好的例子是 的派生词EventArgs,比如PaintEventArgs. 所有需要的信息都附带一个实例。
这使您还可以实现更多功能。例如,我几乎总是覆盖ToString()该类的方法,因此我能够在调试时显示对象内容,或者只是将对象添加到 aListBox或 a ComboBox,因为它们调用ToString()显示。

于 2013-07-09T20:26:11.413 回答
1

制作一个适用于您要存储的数据类型的数据结构不是更有意义吗?我不知道这是项目的特定限制还是家庭作业,但似乎使用 ArrayList 来存储具有所需数据成员的对象在打印出来时会更容易。

于 2013-07-09T20:19:42.663 回答
1

List使用 a of Lists 或类似的东西会更好地解决这个问题。例如:

List<List<string>> example = new List<List<string>>();
List<string> door = new List<string>();
door.Add("Door");
door.Add("A1");
door.Add("A2");
example.Add(door);
...so on and so forth...

然后循环通过它只是以下问题:

foreach (List<string> list in example)
{
  foreach (string s in list)
  {
     //magic
  }
}
于 2013-07-09T20:23:11.287 回答
1

您可以使用moreLINQ库中的Split方法,但由于没有实现,您必须先调用。ArrayListIEnumerable<T>Cast<T>()

var result = source.Cast<string>().Split("-----");

但首先,我建议首先使用List<string>而不是ArrayList

于 2013-07-09T20:24:19.417 回答
0

您可以将您ArrayList的列表转换为列表,如下所示:

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

foreach (string element in example)
{
    if (element.Equals("-----"))
    {
        current = new List<string>();
        list.Add(current);
    }
    else
    {
        current.Add(element);
    }
}

if (!current.Any())
{
    list.Remove(current);
}

但是,正如其他人所说,如果可以的话,最好ArrayList完全避免。

于 2013-07-09T20:33:37.063 回答