VB中ArrayToText如何使用
2个回答
2015-04-18 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数:117538
获赞数:517181
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。
向TA提问 私信TA
关注
展开全部
数组的作用就是允许用同一个名称来引用多个变量。这些同名的变量依靠各自所带的序数标志来区分,我们把这些序数标志成为下标。第一个元素的下标为0,第二个元素的下标为1,……,依次类推。每个元素的表示是数组名(下标)。如:shuzu(3)表示数组shuzu中的第4个元素。
VB.NET中的数组有两种类型:定长数组(元素个数在声明时固定下来)和动态数组(声明时不确定元素个数)。一般声明定长数组方式为 [范围] 数组名(最大下标)As 类型。我们把这里的最大下标称为数组的上限数,当然数组的下限数一般都是0。如果上限值为空,则声明的是动态数组。如:Dim shuzu(3) As Integer 定义了一个上限为3,含有3+1个元素的数组shuzu。注意这里的shuzu(3)和上文的shuzu(3)不是一回事,单用shuzu(3)时是元素。
如果数组为多维数组,声明数组时或表示其元素时需用逗号隔开各维的下标,如Dim shuzu(2,4) As String,定义了一个二维数组,第一维上限为2,第二维上限为4,如果表示其第一行第二列的元素,表示为shuzu(0,1)。因为数组在内存中是用连续的区域来存储的,所以声明数组时每维的长度不能超过Long数据类型的最大值。数组最多有32维。
因为数组元素下标的有序性,我们常用For Each … Next 或 For i As Integer = 0 To … 来遍历其所有元素或给数组赋值。如果元素个数不多,给数组赋值也可以在其声明时进行,但此时数组声明中不可有下标值(多维数组可以有逗号)。如:Dim shuzu() As Integer = {1,4,8, 5}。 Dim shuzu(,) As Integer = {{"00","01"},{"10","11"}}。关于多维数组和二维数组的赋值见我的另一篇文章。
也可以用系统自带的Array类和其CreateInstance(类型,元素数)方法来给数组声明和赋值。赋值也可以用SetValue,取值用GetValue。如:
Dim shuzu As Array = Array.CreateInstance(GetType(Integer),5)
For i As Integer = 0 To 4
shuzu.SetValue(i*7,i) 'shuzu(i) = i*7
Next
For j As Integer = 0 To 4
MessageBox.Show(shuzu.GetValue(j).ToString)
Next
数组的维数可以用Rank获取,每维的长度(其元素个数)可以用Length、LongLength、GetLeng(维)、GetLongLeng(维)方法来得到。如:
MessageBox.Show(shuzu.Rank.ToString)
MessageBox.Show(shuzu.GetLength(0).ToString)
获取每维的上限值用UBound(数组名,维)或数组名.GetUpperBound(维);获取其下限值用LBound(数组名,维)或数组名.GetLowerBound(维)。但注意UBound和LBound的参数维为第一维时是1,不是0。如获取数组shuzu第二维的上限值:
MessageBox.Show(UBound(shuzu, 2).ToString)
MessageBox.Show(shuzu.GetUpperBound(1).ToString)
对于动态数组,声明后如果想使用,需用ReDim语句来改变数组大小。ReDim语句声明只能在过程当中使用,它是可执行语句,可以改变数组中元素的个数,但是却不可以改变数组的维数,并且会把数组中原有的各元素值全部倾空。如果想改变数组大小又不想丢失原来的数据,需要在ReDim后使用Preserve来保存原有数据。对于多维数组,在使用Preserve关键字时,只能修改最后一维的大小。如果改变其他维,那么将出现运行错误。如:
Dim shuzu(,) As Integer = {{2, 3, 4}, {3, 5, 6}} 'shuzu(1,2)
ReDim Preserve shuzu(1, 4) '使用Preserve后只能修改第二维上限
For i As Integer = 0 To 1
For j As Integer = 0 To 4
MessageBox.Show(shuzu(i, j).ToString) '先后显示为2,3,4,0,0,3,5,6,0,0
Next
Next
如果将数组的各元素赋值为一些数组,则该数组必须声明为Object类型。如:
Dim shuzu1() As Integer = {1, 3, 4}
Dim shuzu2() As Integer = {6, 7, 8}
Dim shuzu3() As Integer = {9, 10, 11}
Dim shuzu(2) As Object
shuzu(0) = shuzu1 : shuzu(1) = shuzu2 : shuzu(2) = shuzu3
MessageBox.Show(shuzu(1)(2).ToString) '显示为shuzu第2个元素shuzu(1)也就是shuzu2的第3个元素值8。此处必须关闭Option Strict,否则会显示不允许后期绑定的错误提示。
如果定义维下限不为0的数组,创建应使用Arry.CreateInstance(GetType(类型),整型维数组,整型下限数组),。如:
Dim shuzu As Array = Array.CreateInstance(GetType(String), {3, 4}, {1, 2})
'定义字符数组shuzu,第1维下限为1,上限为3;第2维下限为2,上限为4。
For i As Integer = 1 To 3
For j As Integer = 2 To 4
shuzu(i, j) = i.ToString & "-" & j.ToString
Next
Next
MessageBox.Show(shuzu(3, 2))
'显示为3-2;奇怪的是如果用shuzu(3, 5),第二维超限,会返回空,显示空提示框,其他不符合的会出错。
一些Array类的常用方法:
1、复制数组方法:
数组.CopyTo(目标数组,目标数组起始位)
数组.Copy(源数组,源数组起始位,目标数组,目标数组起始位,长度)
当然也可以用Redim Preserve来保存源数组值,然后赋值给定义的新数组,如:
Dim shuzu() As Integer = {3, 5, 67}
ReDim Preserve shuzu(4)
Dim shuzu2(4) As Integer
shuzu2 = shuzu
MessageBox.Show(shuzu2(2)) '显示67,如果用shuzu2(4),显示为0。
此方法运行速度不如用Copy方法快。
Dim shuzu As Array = Array.CreateInstance(GetType(Integer), 3)
shuzu = {3, 5, 67}
Dim shuzu2 As Array = Array.CreateInstance(GetType(Integer), 4)
shuzu.CopyTo(shuzu2, 0)
MessageBox.Show(shuzu2(2)) '显示为67,如shuzu2(3),显示0。
2、返回元素的下标值:
Array.IndexOf(数组,元素值)--返回第一个等于该元素值的元素的下标值
Array.LastIndexOf(数组,元素值)--返回最后一个等于该元素值的元素的下标值
如:MessageBox.Show(Array.IndexOf(shuzu2,67).ToString) '显示为2。
3、反向排列各元素值:
Array.Reverse(数组) 如Array.Reverse(shuzu2)后再显示shuzu2(0),显示为67。
4、将数组各元素排序:
Array.Sort(数组)-- 数组中的元素对象需执行IComparable接口
Array.Sort(数组,比较类)-- 比较类为执行了IComparer接口的比较方法类
5、搜索数组元素:
Array.BinarySearch(数组,元素值) -- 使用前需先执行Array.Sort,返回该元素的下标值。
例如以下查询例子:
Public Class Form1
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim book1 As Book = New Book("Lei Feng Diary")
Dim book2 As Book = New Book("Tales of Two Cites")
Dim book3 As Book = New Book("1000 Nights")
Dim books() As Book = {book1, book2, book3}
Array.Sort(books) '排序,因为Book类执行了IComparable接口
For i As Integer = 0 To 2
MessageBox.Show(books(i).ToString) '显示1000--,Lei--,Tales--
Next
End Sub
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim book1 As Book = New Book("Lei Feng Diary")
Dim book2 As Book = New Book("Tales of Two Cites")
Dim book3 As Book = New Book("1000 Nights")
Dim books() As Book = {book1, book2, book3}
Array.Sort(books, New CompareBook)
'排序,因为使用了CompareBook比较方法,即使把Book中的Implements IComparable去掉依然成立。
MessageBox.Show(Array.BinarySearch(books, book1).ToString) ’显示下标由原来的0变为1
End Sub
End Class
Public Class Book
Implements IComparable ’让该类执行一个比较方法接口
Public bookname As String
Public Sub New(ByVal book_name As String)
bookname = book_name
End Sub
Public Overrides Function ToString() As String
Return bookname
End Function
Public Function CompareTo(ByVal obj As Object) As Integer Implements System.IComparable.CompareTo
Dim anotherbook As Book = DirectCast(obj, Book)
Return String.Compare(Me.ToString, anotherbook.ToString)
End Function
End Class
Public Class CompareBook '定义一个比较类
Implements IComparer
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare
Dim book1 As Book = DirectCast(x, Book)
Dim book2 As Book = DirectCast(y, Book)
Return String.Compare(book1.ToString, book2.ToString)
End Function
End Class
VB.NET中的数组有两种类型:定长数组(元素个数在声明时固定下来)和动态数组(声明时不确定元素个数)。一般声明定长数组方式为 [范围] 数组名(最大下标)As 类型。我们把这里的最大下标称为数组的上限数,当然数组的下限数一般都是0。如果上限值为空,则声明的是动态数组。如:Dim shuzu(3) As Integer 定义了一个上限为3,含有3+1个元素的数组shuzu。注意这里的shuzu(3)和上文的shuzu(3)不是一回事,单用shuzu(3)时是元素。
如果数组为多维数组,声明数组时或表示其元素时需用逗号隔开各维的下标,如Dim shuzu(2,4) As String,定义了一个二维数组,第一维上限为2,第二维上限为4,如果表示其第一行第二列的元素,表示为shuzu(0,1)。因为数组在内存中是用连续的区域来存储的,所以声明数组时每维的长度不能超过Long数据类型的最大值。数组最多有32维。
因为数组元素下标的有序性,我们常用For Each … Next 或 For i As Integer = 0 To … 来遍历其所有元素或给数组赋值。如果元素个数不多,给数组赋值也可以在其声明时进行,但此时数组声明中不可有下标值(多维数组可以有逗号)。如:Dim shuzu() As Integer = {1,4,8, 5}。 Dim shuzu(,) As Integer = {{"00","01"},{"10","11"}}。关于多维数组和二维数组的赋值见我的另一篇文章。
也可以用系统自带的Array类和其CreateInstance(类型,元素数)方法来给数组声明和赋值。赋值也可以用SetValue,取值用GetValue。如:
Dim shuzu As Array = Array.CreateInstance(GetType(Integer),5)
For i As Integer = 0 To 4
shuzu.SetValue(i*7,i) 'shuzu(i) = i*7
Next
For j As Integer = 0 To 4
MessageBox.Show(shuzu.GetValue(j).ToString)
Next
数组的维数可以用Rank获取,每维的长度(其元素个数)可以用Length、LongLength、GetLeng(维)、GetLongLeng(维)方法来得到。如:
MessageBox.Show(shuzu.Rank.ToString)
MessageBox.Show(shuzu.GetLength(0).ToString)
获取每维的上限值用UBound(数组名,维)或数组名.GetUpperBound(维);获取其下限值用LBound(数组名,维)或数组名.GetLowerBound(维)。但注意UBound和LBound的参数维为第一维时是1,不是0。如获取数组shuzu第二维的上限值:
MessageBox.Show(UBound(shuzu, 2).ToString)
MessageBox.Show(shuzu.GetUpperBound(1).ToString)
对于动态数组,声明后如果想使用,需用ReDim语句来改变数组大小。ReDim语句声明只能在过程当中使用,它是可执行语句,可以改变数组中元素的个数,但是却不可以改变数组的维数,并且会把数组中原有的各元素值全部倾空。如果想改变数组大小又不想丢失原来的数据,需要在ReDim后使用Preserve来保存原有数据。对于多维数组,在使用Preserve关键字时,只能修改最后一维的大小。如果改变其他维,那么将出现运行错误。如:
Dim shuzu(,) As Integer = {{2, 3, 4}, {3, 5, 6}} 'shuzu(1,2)
ReDim Preserve shuzu(1, 4) '使用Preserve后只能修改第二维上限
For i As Integer = 0 To 1
For j As Integer = 0 To 4
MessageBox.Show(shuzu(i, j).ToString) '先后显示为2,3,4,0,0,3,5,6,0,0
Next
Next
如果将数组的各元素赋值为一些数组,则该数组必须声明为Object类型。如:
Dim shuzu1() As Integer = {1, 3, 4}
Dim shuzu2() As Integer = {6, 7, 8}
Dim shuzu3() As Integer = {9, 10, 11}
Dim shuzu(2) As Object
shuzu(0) = shuzu1 : shuzu(1) = shuzu2 : shuzu(2) = shuzu3
MessageBox.Show(shuzu(1)(2).ToString) '显示为shuzu第2个元素shuzu(1)也就是shuzu2的第3个元素值8。此处必须关闭Option Strict,否则会显示不允许后期绑定的错误提示。
如果定义维下限不为0的数组,创建应使用Arry.CreateInstance(GetType(类型),整型维数组,整型下限数组),。如:
Dim shuzu As Array = Array.CreateInstance(GetType(String), {3, 4}, {1, 2})
'定义字符数组shuzu,第1维下限为1,上限为3;第2维下限为2,上限为4。
For i As Integer = 1 To 3
For j As Integer = 2 To 4
shuzu(i, j) = i.ToString & "-" & j.ToString
Next
Next
MessageBox.Show(shuzu(3, 2))
'显示为3-2;奇怪的是如果用shuzu(3, 5),第二维超限,会返回空,显示空提示框,其他不符合的会出错。
一些Array类的常用方法:
1、复制数组方法:
数组.CopyTo(目标数组,目标数组起始位)
数组.Copy(源数组,源数组起始位,目标数组,目标数组起始位,长度)
当然也可以用Redim Preserve来保存源数组值,然后赋值给定义的新数组,如:
Dim shuzu() As Integer = {3, 5, 67}
ReDim Preserve shuzu(4)
Dim shuzu2(4) As Integer
shuzu2 = shuzu
MessageBox.Show(shuzu2(2)) '显示67,如果用shuzu2(4),显示为0。
此方法运行速度不如用Copy方法快。
Dim shuzu As Array = Array.CreateInstance(GetType(Integer), 3)
shuzu = {3, 5, 67}
Dim shuzu2 As Array = Array.CreateInstance(GetType(Integer), 4)
shuzu.CopyTo(shuzu2, 0)
MessageBox.Show(shuzu2(2)) '显示为67,如shuzu2(3),显示0。
2、返回元素的下标值:
Array.IndexOf(数组,元素值)--返回第一个等于该元素值的元素的下标值
Array.LastIndexOf(数组,元素值)--返回最后一个等于该元素值的元素的下标值
如:MessageBox.Show(Array.IndexOf(shuzu2,67).ToString) '显示为2。
3、反向排列各元素值:
Array.Reverse(数组) 如Array.Reverse(shuzu2)后再显示shuzu2(0),显示为67。
4、将数组各元素排序:
Array.Sort(数组)-- 数组中的元素对象需执行IComparable接口
Array.Sort(数组,比较类)-- 比较类为执行了IComparer接口的比较方法类
5、搜索数组元素:
Array.BinarySearch(数组,元素值) -- 使用前需先执行Array.Sort,返回该元素的下标值。
例如以下查询例子:
Public Class Form1
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim book1 As Book = New Book("Lei Feng Diary")
Dim book2 As Book = New Book("Tales of Two Cites")
Dim book3 As Book = New Book("1000 Nights")
Dim books() As Book = {book1, book2, book3}
Array.Sort(books) '排序,因为Book类执行了IComparable接口
For i As Integer = 0 To 2
MessageBox.Show(books(i).ToString) '显示1000--,Lei--,Tales--
Next
End Sub
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim book1 As Book = New Book("Lei Feng Diary")
Dim book2 As Book = New Book("Tales of Two Cites")
Dim book3 As Book = New Book("1000 Nights")
Dim books() As Book = {book1, book2, book3}
Array.Sort(books, New CompareBook)
'排序,因为使用了CompareBook比较方法,即使把Book中的Implements IComparable去掉依然成立。
MessageBox.Show(Array.BinarySearch(books, book1).ToString) ’显示下标由原来的0变为1
End Sub
End Class
Public Class Book
Implements IComparable ’让该类执行一个比较方法接口
Public bookname As String
Public Sub New(ByVal book_name As String)
bookname = book_name
End Sub
Public Overrides Function ToString() As String
Return bookname
End Function
Public Function CompareTo(ByVal obj As Object) As Integer Implements System.IComparable.CompareTo
Dim anotherbook As Book = DirectCast(obj, Book)
Return String.Compare(Me.ToString, anotherbook.ToString)
End Function
End Class
Public Class CompareBook '定义一个比较类
Implements IComparer
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare
Dim book1 As Book = DirectCast(x, Book)
Dim book2 As Book = DirectCast(y, Book)
Return String.Compare(book1.ToString, book2.ToString)
End Function
End Class
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
VB中有ArrayToText吗?是自定义函数吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询