代码之家  ›  专栏  ›  技术社区  ›  Kieran Senior

将Int列表转换为整数

c#
  •  6
  • Kieran Senior  · 技术社区  · 15 年前

    我必须承认,这是一个有点奇怪的情况,但我正试图找到一种简洁而优雅的方式来转换 List<int> 变成实际的 int . 例如,如果我的列表包含条目1、2和3,那么最后的整数将是123。

    有什么提示吗?

    6 回复  |  直到 15 年前
        1
  •  16
  •   David M    12 年前

    int total = 0;
    foreach (int entry in list)
    {
        total = 10 * total + entry;
    }
    
        2
  •  4
  •   Hans Olsson    15 年前
    List<int> l = new List<int>();
    // add numbers
    int result = int.Parse(string.Join(",", l).Replace(",", ""))
    

    如果列表足够长,则必须小心,这样得到的数字将超过int的限制。

        3
  •  1
  •   Matt Warren    15 年前

    我认为你的建议很好,像这样的建议很管用:

    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);
    
        4
  •  0
  •   Mikael Svenson    15 年前

    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));
    }
    

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

        5
  •  0
  •   Tim Jarvis    15 年前

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

    string val = ints.Select(i=> i.ToString()).Aggregate((s1, s2) => s1 + s2);
    
        6
  •  0
  •   nawfal Donny V.    10 年前

    比如说,你有一个

    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();