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