将Int List转换为Integer

时间:2010-06-14 11:36:47

标签: c#

这是一个我必须承认的奇怪案例,但我正试图找到一种将List<int>转换为实际int的简洁而优雅的方法。例如,如果我的列表包含条目1,2和3,那么最后的整数将是123.我想到的另一种方法是将数组转换为字符串,然后解析字符串。

任何提示?

6 个答案:

答案 0 :(得分:15)

迭代列表,就像添加一个总和,但在每个阶段将运行总数乘以10。

int total = 0;
foreach (int entry in list)
{
    total = 10 * total + entry;
}

答案 1 :(得分:2)

List<int> l = new List<int>();
// add numbers
int result = int.Parse(string.Join(",", l).Replace(",", ""))

如果列表足够长,你必须小心,以便结果数字超过int的限制。

答案 2 :(得分:1)

我认为你的建议非常好,类似这样的工作:

var list = new List<int>() { 1, 2, 3, 4 };
var listAsString = String.Join("", list.ConvertAll(x => x.ToString()).ToArray());
Console.WriteLine(listAsString);
int result = Int32.Parse(listAsString);
Console.WriteLine(result);

答案 3 :(得分:0)

你可以通过在循环中添加所有数字来实现。不确定它比字符串解析更快:

List<int> list = new List<int> {1, 2, 3};
int sum = 0;
int pow = list.Count - 1;
for (int i = 0; i <= pow; i++)
{
    sum += list[i] * (int)Math.Pow(10,(pow-i));
}

此外,如果您有一个很长的列表,您可能希望使用.Net 4的BigInteger类而不是int。

答案 4 :(得分:0)

只是为了好玩(我不知道这有多么有效,可能不是很有效),你也可以用Linq轻松做到这一点......

首先将int列表转换为字符串列表,然后使用aggregate函数将它们连接起来,然后在最后使用in32.TryParse来确保结果值在int范围内。

string val = ints.Select(i=> i.ToString()).Aggregate((s1, s2) => s1 + s2);

答案 5 :(得分:0)

说,你有一个可枚举的

var digits = [1, 2, 3 ...];

然后你可以这样做:

// simplest and correct way; essentially the accepted answer but using LINQ
var number = digits.Aggregate((a, b) => a * 10 + b);

// string manipulation; works for sets like [10, 20, 30]
var number = int.Parse(string.Join("", digits));

// using `Select` instead of `Aggregate` but verbose; not very useful
var number = (int)digits.Select((d, i) => d * Math.Pow(10, digits.Count() - i - 1)).Sum();