0
我有一個ArrayList包含字符串,並且還包含其他ArrayLists可能包含字符串或甚至更多ArrayLists。多級ArrayList抽取
是否有一種簡單的方法從這個多級ArrayList中提取所有的字符串?
我假設一些遞歸是invloved,但我一直無法得到它的工作。
我有一個ArrayList包含字符串,並且還包含其他ArrayLists可能包含字符串或甚至更多ArrayLists。多級ArrayList抽取
是否有一種簡單的方法從這個多級ArrayList中提取所有的字符串?
我假設一些遞歸是invloved,但我一直無法得到它的工作。
public static ArrayList FlattenList(ArrayList list) {
ArrayList l = new ArrayList();
FillList(list, l);
return l;
}
private static void FillList(ArrayList source, ArrayList listToFill) {
foreach (object o in source) {
ArrayList l = o as ArrayList;
if (l != null)
FillList(l, listToFill);
else
listToFill.Add(o);
}
}
作爲替代方案,如果你能使用泛型和迭代集團則有可能有一個方法:
public static IEnumerable<string> GetStrings(ArrayList list)
{
foreach(var item in list)
{
var @string = item as string;
if (@string != null)
yield return @string;
var nestedList = item as ArrayList;
if(nestedList == null)
continue;
foreach (var childString in GetStrings(nestedList))
yield return childString;
}
}
您可能需要使用「爲」,而不是「是」 +投。 – 2009-12-01 22:36:18
@Romain:好點。我已經在編輯答案。實際上,對於這個代碼,它不僅僅是一個性能優化。如果層次結構中的任何位置存在「null」值,則舊版本會拋出「NullReferenceException」。 – 2009-12-01 22:39:38
謝謝你...完美的作品:) – Greycrow 2009-12-01 22:43:30