如何将 List<int> 转换为 string[]?
Posted
技术标签:
【中文标题】如何将 List<int> 转换为 string[]?【英文标题】:How to convert List<int> to string[]? 【发布时间】:2011-05-29 18:53:48 【问题描述】:我需要一种简单的方法将 List<int>
转换为 string
数组。
我有:
var the_list = new List<int>();
the_list.Add(1);
the_list.Add(2);
the_list.Add(3);
string[] the_array = new string[the_list.Count];
for(var i = 0 ; i < the_array.Count; ++i)
the_array[i] = the_list[i].ToString();
...这对我来说看起来很丑。
有没有更简单的方法?
注意:我正在寻找一种更简单的方法 - 不一定是更快的方法。
【问题讨论】:
这是最有效的方法,除非数组中有很多重复的元素。当然,这并不意味着它一定是最简单的方法。 您似乎在问两个不同的问题:什么更有效,哪个更容易。 IMO,这两个问题的答案是不同的:) @Brian:我在问哪个更容易 - 很抱歉造成混乱。 【参考方案1】:使用 LINQ:
string[] the_array = the_list.Select(i => i.ToString()).ToArray();
【讨论】:
注意:虽然我肯定会选择此处列出的 Select.ToArray 方法,但它不可能比您已经使用的方法更快。你的方式是直截了当的,可能是最有效的方式。再次。我选择了@Etienne de Martel 建议的更易于阅读/维护的 Select.ToArray (LINQ) 方法,但您的问题表明您的选择效率低下。 您知道是否可以将未绑定的方法传递给Select
并让它自动将其绑定到元素,类似于Ruby 的Symbol#to_proc
技巧? IE。类似the_list.Select(int.ToString)
? (对于 Haskell 人:我基本上是在问是否有无点解决方案。)
@Ben Voigt 你能解释一下为什么这段代码不快吗?
@jb:因为它很可能必须将所有字符串累积到具有动态大小的集合中,然后一旦知道最终大小,分配数组并复制所有元素。在此示例中,计数在查询开始执行之前是已知的,但 LINQ 库无法知道选择委托不会更改列表的长度。 JIT 编译器可以,但它没有上下文知识来了解它的用处。
@Jorg:是的,可以创建一个未绑定的委托。但它没有语法糖,必须直接调用反射 API。【参考方案2】:
我知道你有一个很好的答案,但你不需要 LINQ 或 Select。您可以使用 ConvertAll 和匿名方法来完成。像这样:
var list = new List<int>();
....
var array = list.ConvertAll( x => x.ToString() ).ToArray();
类似的想法,但我认为这不是 linq。以防万一。
【讨论】:
对于它的价值,ToArray
是 Enumerable
类的静态方法,在我看来它是 LINQ。此外,这很有可能比使用Select
效率低:ConvertAll
将在您将该列表转换为数组之前创建一个中间列表; Select
不需要创建中间列表。
@LukeH 不,这不是 LINQ。【参考方案3】:
抱歉,我没有在这台机器上安装 .NET,所以完全未经测试:
var theList = new List<int>() 1, 2, 3 ;
var theArray = theList.Select(e => e.ToString()).ToArray(); // Lambda Form
var theArray = (from e in theList select e.ToString()).ToArray(); // Query Form
【讨论】:
【参考方案4】:List 有一个 ToArray() 方法。它可以节省您的打字时间,但可能不会更有效率。
【讨论】:
它也不会将数组从int
转换为string
。【参考方案5】:
由于您的列表只有一个数字,您可以轻松地将它们转换为字符串。只需创建一个循环并将其成员转换为字符串。
string[] the_array = new string[the_list.Count];
int i=0;
foreach(var item in the_list)
the_array[i] = item.ToString();
i++;
【讨论】:
请为您的答案添加一些解释。简单地发布代码可能会令人困惑。以上是关于如何将 List<int> 转换为 string[]?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 dart 将 Uint8list 转换为 List<int>?
list<int>1,2,3,4,5怎么转换成list<String>和"1-2-3-4-5"
将 List<List<Integer>> 转换为 int[][]