Fastest way to separate the digits of an int into an array in .NET?

后端 未结 11 969
天涯浪人
天涯浪人 2021-01-31 20:07

I want to separate the digits of an integer, say 12345, into an array of bytes {1,2,3,4,5}, but I want the most performance effective way to do that, because my program does tha

11条回答
  •  南旧
    南旧 (楼主)
    2021-01-31 20:47

    If you can get by with leading zeros it is much easier.

        void Test()
        { 
            // Note: 10 is the maximum number of digits.
            int[] xs = new int[10];
            System.Random r = new System.Random();
            for (int i=0; i < 10000000; ++i)
                Convert(xs, r.Next(int.MaxValue));
        }
    
        // Notice, I don't allocate and return an array each time.
        public void Convert(int[] digits, int val)
        {
            for (int i = 0; i < 10; ++i)
            {
                digits[10 - i - 1] = val % 10;
                val /= 10;
            }
        }
    

    EDIT: Here is a faster version. On my computer it tested faster than two of Jon Skeet's algorithms, except for his memoized version:

    static void Convert(int[] digits, int val)
    {
      digits[9] = val % 10; val /= 10;
      digits[8] = val % 10; val /= 10;
      digits[7] = val % 10; val /= 10;
      digits[6] = val % 10; val /= 10;
      digits[5] = val % 10; val /= 10;
      digits[4] = val % 10; val /= 10;
      digits[3] = val % 10; val /= 10;
      digits[2] = val % 10; val /= 10;
      digits[1] = val % 10; val /= 10;
      digits[0] = val % 10; val /= 10;     
    } 
    

提交回复
热议问题