拆分数组列表
本文关键字:列表 数组 拆分 | 更新日期: 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()
方法,因此我能够在调试或简单地将对象添加到ListBox
或ComboBox
时显示对象内容,因为它们调用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
。