这是一个我必须承认的奇怪情况,但我试图找到一个简洁而优雅的方式将List<int>
转换为实际的int
。例如,如果我的列表包含条目1,2和3,那么最终的整数将是123.我唯一想到的做法是将数组转换为字符串,然后解析字符串。将Int列表转换为Integer
任何提示?
这是一个我必须承认的奇怪情况,但我试图找到一个简洁而优雅的方式将List<int>
转换为实际的int
。例如,如果我的列表包含条目1,2和3,那么最终的整数将是123.我唯一想到的做法是将数组转换为字符串,然后解析字符串。将Int列表转换为Integer
任何提示?
迭代列表,好像添加一个总和,但在每个阶段将运行总数乘以10。
int total = 0;
foreach (int entry in list)
{
total = 10 * total + entry;
}
我觉得你的建议是相当不错的,像这样的工作:
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);
dangit击败了我。 – Will 2010-06-14 11:57:46
List<int> l = new List<int>();
// add numbers
int result = int.Parse(string.Join(",", l).Replace(",", ""))
你必须照顾,如果列表足够长,这样得到的数字将超过int的限制尽管如此。
难道你不能只是'int.Parse(string.Join(“”,l))'? – Kezzer 2010-06-14 13:33:20
您可以通过在循环中添加所有数字来实现。不知道这是不是字符串分析,虽然速度快:
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.0的BigInteger的类,而不是一个int。
好吧只是为了好玩(我不知道这是怎么effecient是,可能不是很),你也可以做到这一点很容易地使用LINQ ...
第一整数列表转换为字符串列表,然后使用聚合函数来连接它们,然后在最后使用in32.TryParse来确保结果值在int范围内。
string val = ints.Select(i=> i.ToString()).Aggregate((s1, s2) => s1 + s2);
说,你有一个像
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();
当心,你的列表中的内容必须出示有效的int(即整数在-2,147,483,648到+2,147,483,647的范围内)。 – Humberto 2010-06-14 11:42:33
另外,如果您的列表类似{100,1,0,2},应该发生什么? – Humberto 2010-06-14 11:43:36
如果列表包含大于等于10的值,那么规则是什么?例如1,20,33,4会变成120334?如果是这样,下面的“10的倍数”答案将失败。 – 2010-06-14 11:43:48