这是一个有点奇怪的情况,我必须承认,但我正在尝试找到一种简洁而优雅的方法将
List<int>
转换为实际的 int
。例如,如果我的列表包含条目1、2和3,则最终整数将为123。我想到的另一种方法是将数组转换为字符串,然后解析该字符串。有什么提示吗?List<int>
转换为实际的 int
。例如,如果我的列表包含条目1、2和3,则最终整数将为123。我想到的另一种方法是将数组转换为字符串,然后解析该字符串。有什么提示吗?在遍历该列表时,就好像进行加法求和一样,但是在每个阶段将运行总数乘以10。
int total = 0;
foreach (int entry in list)
{
total = 10 * total + entry;
}
List<int> l = new List<int>();
// add numbers
int result = int.Parse(string.Join(",", l).Replace(",", ""))
如果列表足够长,使得结果数字超过int的限制,那么你需要注意一下。
int.Parse(string.Join("", l))
? - Kieran Senior假设你有一个可枚举的对象,比如
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();
我认为你的建议非常好,类似这样的代码可以实现:
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);
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。
仅供娱乐而已(我不知道这有多高效,可能不是很高),你也可以轻松地使用 Linq 来实现这个...
首先将整数列表转换为字符串列表,然后使用聚合函数将它们连接起来,最后使用 in32.TryParse 确保结果值在整数范围内。
string val = ints.Select(i=> i.ToString()).Aggregate((s1, s2) => s1 + s2);