Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

convert string[] to int[]

Which is the fastest method for convert an string's array ["1","2","3"] in a int's array [1,2,3] in c#?

thanks

like image 792
Luca Romagnoli Avatar asked Jun 21 '10 09:06

Luca Romagnoli


People also ask

Which method is used to convert a string to an integer?

We can convert String to an int in java using Integer. parseInt() method. To convert String into Integer, we can use Integer. valueOf() method which returns instance of Integer class.

How do I convert a string to an int in JavaScript?

In JavaScript parseInt() function (or a method) is used to convert the passed in string parameter or value to an integer value itself. This function returns an integer of base which is specified in second argument of parseInt() function.

How do I convert a string to an int in C++?

Using the stoi() function The stoi() function converts a string data to an integer type by passing the string as a parameter to return an integer value. The stoi() function contains an str argument. The str string is passed inside the stoi() function to convert string data into an integer value.

How can a string be converted to a number?

You convert a string to a number by calling the Parse or TryParse method found on numeric types ( int , long , double , and so on), or by using methods in the System. Convert class. It's slightly more efficient and straightforward to call a TryParse method (for example, int.


1 Answers

string[] arr1 = {"1","2","3"};
int[] arr2 = Array.ConvertAll(arr1, s => int.Parse(s));

The use of Array.ConvertAll ensures (unlike LINQ Select/ToArray) that the array is initialized at the right size. You can possible get a shade quicker by unrolling, but not much:

int[] arr2 = new int[arr1.Length];
for(int i = 0 ; i < arr1.Length ; i++) {
    arr2[i] = int.Parse(arr[i]);
}

If you need something faster still (perhaps bulk file/data handling), then writing your own parse might help; the inbuilt one handles a lot of edge-cases - if your data is simpler you really can cut this down a bit.


For an example of an alternative parser:

    public static unsafe int ParseBasicInt32(string s)
    {
        int len = s == null ? 0 : s.Length;
        switch(s.Length)
        {
            case 0:
                throw new ArgumentException("s");
            case 1:
                {
                    char c0 = s[0];
                    if (c0 < '0' || c0 > '9') throw new ArgumentException("s");
                    return c0 - '0';
                }
            case 2:
                {
                    char c0 = s[0], c1 = s[1];
                    if (c0 < '0' || c0 > '9' || c1 < '0' || c1 > '9') throw new ArgumentException("s");
                    return ((c0 - '0') * 10) + (c1 - '0');
                }
            default:
                fixed(char* chars = s)
                {
                    int value = 0;
                    for(int i = 0; i < len ; i++)
                    {
                        char c = chars[i];
                        if (c < '0' || c > '9') throw new ArgumentException("s");
                        value = (value * 10) + (c - '0');
                    }
                    return value;
                }
        }
    }
like image 51
Marc Gravell Avatar answered Sep 28 '22 10:09

Marc Gravell