2012-03-08 69 views
16

Tôi đã thử một vài cách khác nhau và dường như không nhận được kết quả tôi muốn bằng cách sử dụng vb.net.Chuyển chuỗi mảng thành mảng int

Tôi có một chuỗi các chuỗi. { "55555", "44.444", " "}

Tôi cần một mảng các số nguyên {} 55555,44444

Đây là một trang WPF đang gửi các mảng như một tham số để báo cáo tinh thể.

Mọi trợ giúp đều được đánh giá cao.

Trả lời

34

Bạn có thể sử dụng List(Of T).ConvertAll phương pháp:

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

hoặc với các đại biểu

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

Nếu bạn chỉ muốn sử dụng Mảng, bạn có thể sử dụng Array.ConvertAll method:

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

Ồ, tôi đã bỏ lỡ chuỗi trống trong dữ liệu mẫu của bạn. Sau đó, bạn cần phải kiểm tra này:

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

Bằng cách này, đây là như nhau trong cú pháp phương pháp, xấu xí as always in 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 
+1

Tôi không chắc chắn nếu nó được ngụ ý, nhưng điều này không bao gồm trường hợp của một chuyển đổi không thành công (chuỗi rỗng). – vcsjones

+0

@vcsjones: Bạn nói đúng, tôi đã bỏ lỡ chuỗi rỗng trong dữ liệu mẫu, đã chỉnh sửa câu trả lời của tôi cho phù hợp. –

+0

tôi nghĩ rằng nó không xấu xí khi bạn làm xước ConvertAll delegate: 'Dim tempInt%: Dim intA As Int32() = intStrA.Where (Hàm (x) Int32.TryParse (x, tempInt)). Chọn (Function (x) tempInt) .ToArray() ' –

1

Có lẽ một cái gì đó như thế này:

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() 
+0

Tại sao bỏ phiếu xuống? – Arion

+0

Tôi không muốn di chuyển từ mảng chuỗi vào danh sách các chuỗi để liệt kê các số nguyên trở lại mảng các số nguyên. Đã hy vọng đi từ mảng này sang mảng khác. Sẽ kiểm tra điều này. Cám ơn. – Primetime

+0

Nếu ý định loại bỏ các mục không chuyển đổi đúng, thì sẽ hiệu quả hơn khi sử dụng Danh sách (Số nguyên) sau đó vào mảng, vì bạn không biết kích thước của mảng mà không kiểm tra xem tất cả có thể chuyển đổi đầu tiên. – vcsjones

4

Bạn có thể sử dụng phương pháp 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 
+0

...bạn đang thiếu chuỗi trống trong dữ liệu mẫu của OP. –

1

Có thể thêm một vài dòng mã so với các câu trả lời khác nhưng ...

'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 
+1

Lưu ý: 'CINT' sẽ ném một' OverflowException' nếu giá trị là số nhưng nằm ngoài phạm vi của một số nguyên, bởi vì ['IsNumeric'] (http://msdn.microsoft.com/en-us/library/6cd3f6w1 % 28VS.71% 29.aspx) cũng trả về 'true' cho các giá trị nằm trong phạm vi thập phân. Điều này cũng đúng nếu giá trị chứa '.' vì giá trị này có thể được chuyển đổi thành Double. –

+0

Vì vậy, nhận xét cảnh báo ở đầu khối mã, nhưng giải thích tốt. – N0Alias

0

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 
Các vấn đề liên quan