【问题标题】:What's a quick way to convert a List<List<string>> to string[][]?将 List<List<string>> 转换为 string[][] 的快速方法是什么?
【发布时间】:2011-03-10 21:13:48
【问题描述】:

.ToArray 不这样做

【问题讨论】:

    标签: c# list arrays


    【解决方案1】:

    Linq 是实现这一目标的方法。

    List<List<String>> list = ....;
    string[][] array = list.Select(l => l.ToArray()).ToArray();
    

    为了进一步分解,类型如下所示:

    List<List<String>> list = ....;
    IEnumerable<String[]> temp = list.Select(l => l.ToArray());
    String[][] array = temp.ToArray();
    

    【讨论】:

    • 好吧,我可能没有拿到绿卡,但至少我击败了 jon skeet!
    【解决方案2】:

    现有答案的一个快速变体,它使用方法组转换而不是 lambda 表达式:

    string[][] array = lists.Select(Enumerable.ToArray).ToArray();
    

    理论上它会稍微快一点,因为传递给Select的委托中的抽象层少了一层。

    记住孩子们:当你看到这种形式的 lambda 表达式时:

    foo => foo.SomeMethod()
    

    考虑使用方法组转换。通常它不会更好,但有时它会:)

    回到List&lt;List&lt;string&gt;&gt; 也很容易:

    List<List<string>> lists = array.Select(Enumerable.ToList).ToList();
    

    【讨论】:

    • 只是为了笑,转换回字符串[][]怎么样?
    • 到目前为止,我还没有意识到使用方法组可以节省一个间接级别的事实——我从来没有真正想过它,总是将它解释为一种语法糖。对此见解 +1。
    • 因效率而获奖
    • @KevinDeus:你的意思是回到List&lt;List&lt;string&gt;&gt;吗?
    • @Jon,是的.. 你听到我的意思了.. 有没有快速的方法将其转换回来?
    【解决方案3】:
    List<List<string>> myStrings;
    
    myStrings.Select(l => l.ToArray()).ToArray();
    

    (LINQ 摇滚)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-17
      • 2021-01-13
      • 1970-01-01
      • 2021-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多