Преобразование массива строк в массив 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