拆分Arraylist

时间:2013-07-09 20:17:33

标签: c# dynamic-columns

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

我有一个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("-----");

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

|Door| A1 | A2 | House | A1 | A2 | Fence | 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.

任何帮助都将不胜感激。

5 个答案:

答案 0 :(得分: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()方法,因此我可以在调试时显示对象内容,或者只是将对象添加到ListBoxComboBox,因为他们打电话给ToString()来显示。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

使用List 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
  }
}

答案 3 :(得分:1)

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

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

但首先,我建议首先使用List<string>代替ArrayList

答案 4 :(得分: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