2011-03-24 53 views
1

我想从Arraylist的Arraylist创建一个字符串数组。Arraylist的Arraylist字符串数组

下面是一个代码:

ArrayList MainList = new ArrayList(); 

ArrayList subList = new ArrayList(); 
subList.Add("A"); 
subList.Add("Apple"); 
MainList.Add(subList); 

subList = new ArrayList(); 
subList.Add("B"); 
subList.Add("Banana"); 
MainList.Add(subList); 

subList = new ArrayList(); 
subList.Add("C"); 
subList.Add("Caret"); 
MainList.Add(subList); 

string[] AllList = { "A", "Apple", "B", "Banana", "C", "Caret" }; 
string[] OnlySome = { "Apple", "Banana", "Caret" }; 

我知道我们可以用它为每个循环做,但我怎么能得到AllList和使用LINQ查询OnlySome字符串数组?

感谢

+4

是否有您所使用的'ArrayList'代替'名单'什么特别的原因? – Gabe 2011-03-24 16:04:26

+0

我也建议你不要将你的子列表存储为ArrayList。这似乎更有可能是你应该使用类似于:Dictionary ,List ,List >或者可能是一个List > – Stuart 2011-03-24 16:43:55

回答

3

肯定的:

var allList = 
    MainList. 
     Cast<ArrayList>(). 
     SelectMany(a => a.Cast<string>()). 
     ToArray(); 

var onlySome = 
    MainList. 
     Cast<ArrayList>(). 
     Select(a => 
      a.Cast<string>(). 
       Skip(1). 
       First()). 
     ToArray(); 
+0

我不知道如果在这种情况下,'Cast'或'OfType'更好。当我知道集合包含这种类型的元素并且他们都是我关心的时候,我更喜欢在投射时进行“投射”,并且使用“OfType”。 – Will 2011-03-24 16:09:53

0

我不知道究竟是什么OnlySome确切的条件,所以我觉得2个选项,

  • 选择所有其他元素(奇数索引,甚至位置)onlySome1
  • 选择任何长度大于1的字符串onlySome2

    var allList = (from al in MainList.ToArray() 
            from s in (al as ArrayList).ToArray() 
            select s as string).ToArray(); 
    
        // if you want to select every other element 
        var onlySome1 = allList.Where((s, index) => index % 2 == 1).ToArray(); 
    
        // if you want to select all the strings with 2 or more characters. 
        var onlySome2 = allList.Where(s => (s as string).Length > 1).ToArray(); 
    
+0

谢谢你们! – TJP 2011-03-26 17:18:10