【问题标题】:How to convert int array to int?如何将int数组转换为int?
【发布时间】:2012-03-05 10:06:31
【问题描述】:

我想学习如何在 C# 中将 int 数组转换为 int。

但是我想用数组中的值附加 int。

例子:

int[] array = {5, 6, 2, 4};

将被转换为等于 5624 的 int。

提前感谢您的帮助。

【问题讨论】:

  • 如果数组中的数字包含一个无法放入int的数字会怎样?
  • 数组项不在 0...9 范围内怎么办?

标签: c# .net arrays math int


【解决方案1】:

只需将每个数字乘以 10^ 他在数组中的位置。

int[] array = { 5, 6, 2, 4 };
int finalScore = 0;
for (int i = 0; i < array.Length; i++)
{
    finalScore += array[i] * Convert.ToInt32(Math.Pow(10, array.Length-i-1));
}

【讨论】:

  • 为了快一点 Convert.ToInt32(Math.Pow(10, array.Length-i-1)) -> 可以改成调用自定义方法:int getIntRank(int rank ){ int multiplier=1;for (int k=0; k
【解决方案2】:
int output = array
    .Select((t, i) => t * Convert.ToInt32(Math.Pow(10, array.Length - i - 1)))
    .Sum();

【讨论】:

    【解决方案3】:

    另一种简单的方法:

    int[] array =  {5, 6, 2, 4};
    int num;
    if (Int32.TryParse(string.Join("", array), out num))
    {
        //success - handle the number
    }
    else
    {
        //failed - too many digits in the array
    }
    

    这里的技巧是把数组变成一串数字,然后将其解析为整数。

    【讨论】:

    【解决方案4】:

    使用这个代码你只是想连接你的 int 数组所以使用下面的代码

    String a;
    int output;
    int[] array = {5, 6, 2, 4};
    foreach(int test in array)
    {
    a+=test.toString();
    }
    output=int.parse(a);
    //where output gives you desire out put
    

    这不是一个确切的代码。

    【讨论】:

    • @FelixK。 OP 没有指定他需要对时间敏感的代码,这是最易读的编码答案。
    • 即便如此,Shadow Wizard 的答案更具可读性和安全性,但关键是与其他解决方案相比,它在速度方面并不是一个好的解决方案。
    • 改用字符串生成器,我会很好的。 +1 提高可读性
    【解决方案5】:
    int result = 0;
    int[] arr = { 1, 2, 3, 4};
    int multipicator = 1;
    for (int i = arr.Length - 1; i >= 0; i--)
    {
       result += arr[i] * multipicator;
       multipicator *= 10;
    }
    

    【讨论】:

      【解决方案6】:

      尝试以下方法:

              int[] intArray = new int[] { 5, 4, 6, 1, 6, 8 };
      
              int total = 0;
              for (int i = 0; i < intArray.Length; i++)
              {
                  int index = intArray.Length - i - 1;
                  total += ((int)Math.Pow(10, index)) * intArray[i];
              }
      

      【讨论】:

      • 它返回4265 - 这不是我们想要的结果。
      【解决方案7】:

      在 C# 3.0 及更高版本中:

      array.Select((t, i) => t * Convert.ToInt32(Math.Pow(10, array.Length - i - 1))).Sum();
      

      【讨论】:

        【解决方案8】:

        使用 LINQ

        long result =  array.Aggregate((result, x) => result * 10 + x);
        

        【讨论】:

        • 最优雅的解决方案!为避免编译错误,请使用: long result = array.Aggregate((aggregate, x) => aggregate * 10 + x);
        【解决方案9】:

        如果您了解十进制系统的工作原理,这将很容易。

        所以让我为你解释一下:十进制数字包含以十为底的单个数字。

        这意味着你必须遍历这个数组(向后!)并乘以 10^

        例如 5624 的意思是:(5*10^3)​​ + (6*10^2) + (2*10^1) + (4*10^0)

        另请考虑:http://en.wikipedia.org/wiki/Horner_scheme

        【讨论】:

          【解决方案10】:

          只是为了好玩......

          arr.Select((item, index) => new { Item = item, Power = arr.Length - (index - 1) }).ToList().ForEach(item => total += (int)(Math.Pow(10, item.Power) * item.Item));
          

          【讨论】:

            【解决方案11】:

            这样就可以了:

            public int DoConvert(int[] arr)
            {
            
              int result = 0;
            
              for (int i=0;i<arr.Length;i++)
                result += arr[i] * Math.Pow(10, (arr.Length-1)-i);
            
              return result; 
            }
            

            【讨论】:

              【解决方案12】:
              var finalScore = int.Parse(array
                  .Select(x => x.ToString())
                  .Aggregate((prev, next) => prev + next));
              

              【讨论】:

                【解决方案13】:

                你可以使用字符串流 (包括“流”)

                使用命名空间标准; int main(){

                int arr[3]={3,2,4};     //your array..
                
                stringstream ss;
                
                ss<<arr[0];   //this can be run as a loop
                ss<<arr[1];
                ss<<arr[2];
                
                
                int x;
                ss>>x;
                
                cout<<x;        //simply the int arr[3] will be converted to int x..
                

                【讨论】:

                • 记得添加#include
                【解决方案14】:

                如果你想将 int[] 转换为 int?[] 数组,我只使用 for 循环 :(

                 int[] First = Person.Select(p => p.ShiftID).ToArray();
                                int?[] converted = new int?[First.Length];
                                for (int im = 0; im < First.Length; im++)
                                    converted[im] = First[im];
                

                我找不到通过高性能更好地转换的方法,

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-09-28
                  • 1970-01-01
                  • 2021-11-25
                  • 2018-05-11
                  • 2014-05-22
                  • 1970-01-01
                  相关资源
                  最近更新 更多