Многоуровневое извлечение ArrayList - PullRequest
0 голосов
/ 02 декабря 2009

У меня есть ArrayList, который содержит строки, а также содержит другие списки ArrayList, которые могут содержать строки или даже больше ArrayList.

Есть ли простой способ извлечь все строки из этого многоуровневого ArrayList?

Я предполагаю, что какая-то рекурсия задействована, но я не смог заставить ее работать.

Ответы [ 2 ]

5 голосов
/ 02 декабря 2009
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);
   }
}
0 голосов
/ 02 декабря 2009

В качестве альтернативы, если вы можете использовать дженерики и блоки итераторов, тогда становится возможным использовать один метод:

    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;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...