2009-12-01 51 views
0

我有一個ArrayList包含字符串,並且還包含其他ArrayLists可能包含字符串或甚至更多ArrayLists。多級ArrayList抽取

是否有一種簡單的方法從這個多級ArrayList中提取所有的字符串?

我假設一些遞歸是invloved,但我一直無法得到它的工作。

回答

5
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); 
    } 
} 
+1

您可能需要使用「爲」,而不是「是」 +投。 – 2009-12-01 22:36:18

+0

@Romain:好點。我已經在編輯答案。實際上,對於這個代碼,它不僅僅是一個性能優化。如果層次結構中的任何位置存在「null」值,則舊版本會拋出「NullReferenceException」。 – 2009-12-01 22:39:38

+0

謝謝你...完美的作品:) – Greycrow 2009-12-01 22:43:30

0

作爲替代方案,如果你能使用泛型和迭代集團則有可能有一個方法:

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