将 List<List<string>> 转换为 string[][] 的快速方法是啥?

Posted

技术标签:

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

.ToArray 不这样做

【问题讨论】:

【参考方案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 摇滚)

【讨论】:

以上是关于将 List<List<string>> 转换为 string[][] 的快速方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

将 List<Observable<String>> 组合成 Observable<List<String>>

如何将 List<string> 转换为 List<myEnumType>?

如何将map<string list<>>转换成城map<string,object>

将 List<String> 直接转换为 List<Integer>

如何将 List<int> 转换为 string[]?

Java 将List<Object; 转换成 Map<String, Map<String,List<Object;;;的几种方法