Преобразование массива строк в массив int

Я пробовал пару разных способов и не могу получить результат, который я хочу использовать vb.net.

У меня есть массив строк. { "55555", "44444", ""}

Мне нужен массив целых чисел {55555,44444}

Это страница wpf, которая отправляет массив в качестве параметра в отчет о кристалле.

Любая помощь приветствуется.

Ответы

Ответ 1

Вы можете использовать метод List(Of T).ConvertAll:

Dim stringList = {"123", "456", "789"}.ToList
Dim intList = stringList.ConvertAll(Function(str) Int32.Parse(str))

или с делегатом

Dim intList = stringList.ConvertAll(AddressOf Int32.Parse)

Если вы хотите использовать Массивы, вы можете использовать Array.ConvertAll method:

Dim stringArray = {"123", "456", "789"}
Dim intArray = Array.ConvertAll(stringArray, Function(str) Int32.Parse(str))

О, я пропустил пустую строку в ваших данных образца. Затем вам нужно проверить это:

Dim value As Int32
Dim intArray = (From str In stringArray
               Let isInt = Int32.TryParse(str, value)
               Where isInt
               Select Int32.Parse(str)).ToArray

Кстати, здесь то же самое в синтаксисе метода, уродливый как всегда в VB.NET:

Dim intArray = Array.ConvertAll(stringArray,
                        Function(str) New With {
                            .IsInt = Int32.TryParse(str, value),
                            .Value = value
                        }).Where(Function(result) result.IsInt).
                Select(Function(result) result.Value).ToArray

Ответ 2

Вы можете использовать метод Array.ConvertAll:

    Dim arrStrings() As String = {"55555", "44444"}
    Dim arrIntegers() As Integer = Array.ConvertAll(arrStrings, New Converter(Of String, Integer)(AddressOf ConvertToInteger))


    Public Function ConvertToInteger(ByVal input As String) As Integer
        Dim output As Integer = 0

        Integer.TryParse(input, output)

        Return output
    End Function

Ответ 3

Возможно, что-то вроде этого:

dim ls as new List(of string)()
ls.Add("55555")
ls.Add("44444")
ls.Add(" ")
Dim temp as integer
Dim ls2 as List(Of integer)=ls.Where(function(x) integer.TryParse(x,temp)).Select(function(x) temp).ToList()

Ответ 4

Возможно, еще несколько строк кода, чем другие ответы, но...

    'Example assumes the numbers you are working with are all Integers.
    Dim arrNumeric() As Integer

    For Each strItemInArray In YourArrayName

        If IsNumeric(strItemInArray) Then

            If arrNumeric Is Nothing Then

                ReDim arrNumeric(0)
                arrNumeric(0) = CInt(strItemInArray)

            Else

                ReDim Preserve arrNumeric(arrNumeric.Length)
                arrNumeric(arrNumeric.Length - 1) = CInt(strItemInArray)

            End If

        End If

    Next

Ответ 5

My $.02

    Dim stringList() As String = New String() {"", "123", "456", "789", "a"}
    Dim intList() As Integer

    intList = (From str As String In stringList
               Where Integer.TryParse(str, Nothing)
               Select (Integer.Parse(str))).ToArray