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

Posted

技术标签:

【中文标题】如何将 List<int> 转换为 string[]?【英文标题】:How to convert List<int> to string[]? 【发布时间】:2011-05-29 18:53:48 【问题描述】:

我需要一种简单的方法将 List&lt;int&gt; 转换为 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。以防万一。

【讨论】:

对于它的价值,ToArrayEnumerable 类的静态方法,在我看来它是 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> 转换为连接的整数字符串?

list<int>1,2,3,4,5怎么转换成list<String>和"1-2-3-4-5"

将 List<List<Integer>> 转换为 int[][]

将 List<int> 转换为 List<int?> 的最快方法

如何将 Future<int> 转换为 int?