拆分数组列表

本文关键字:列表 数组 拆分 | 更新日期: 2023-09-27 18:21:54

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

我有一个for循环,它将项目添加到ArrayList中。我有另一个for循环,它遍历"example"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|A1|

然而,我需要表中的数据显示如下示例:

|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.

如有任何帮助,我们将不胜感激。

拆分数组列表

我会这样做:

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()方法,因此我能够在调试或简单地将对象添加到ListBoxComboBox时显示对象内容,因为它们调用ToString()进行显示。

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

使用List s的List或类似的方法会更好地解决此问题。例如:

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
  }
}

您可以使用moreLINQ库中的Split方法,但由于ArrayList不实现IEnumerable<T>,您必须首先调用Cast<T>()

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

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

您可以将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