背景信息:我正在遍历网站集,该网站集以正确的层次结构顺序存储我正在寻找的所有网站。当我尝试以嵌套格式显示此信息时,除了同一行格式中的多个列之外,我遇到了问题。
我有一个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.
任何帮助都将不胜感激。
答案 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()
方法,因此我可以在调试时显示对象内容,或者只是将对象添加到ListBox
或ComboBox
,因为他们打电话给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
。