将 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<List<string>>
也很容易:
List<List<string>> lists = array.Select(Enumerable.ToList).ToList();
【讨论】:
只是为了笑,转换回字符串[][]怎么样? 到目前为止,我还没有意识到使用方法组可以节省一个间接级别的事实——我从来没有真正想过它,总是将它解释为一种语法糖。对此见解 +1。 因效率而获奖 @KevinDeus:你的意思是回到List<List<string>>
吗?
@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>
Java 将List<Object; 转换成 Map<String, Map<String,List<Object;;;的几种方法