Arrays char()和string()的泛型数组类型
我在学校学习排序算法,我们应该对所有字符进行排序,然后实现单词排序 我使用了一个Char()数组,并使用String()数组对单词进行排序。现在,我想将两者合并为一个函数:Arrays char()和string()的泛型数组类型,arrays,vb.net,sorting,Arrays,Vb.net,Sorting,我在学校学习排序算法,我们应该对所有字符进行排序,然后实现单词排序 我使用了一个Char()数组,并使用String()数组对单词进行排序。现在,我想将两者合并为一个函数: For j = 0 To arr.Length For i = 0 To hi If arr(i) > arr(i + 1) Then Swap(arr, i, i + 1) End If Next hi -= 1 Next 如何使arr既可以是Ch
For j = 0 To arr.Length
For i = 0 To hi
If arr(i) > arr(i + 1) Then
Swap(arr, i, i + 1)
End If
Next
hi -= 1
Next
如何使arr既可以是Char()又可以是String()
我试过:
If bolWords Then
Dim arr As String()
Else
Dim arr As Char()
End If
但它说,这是未申报的,因为范围。我也尝试了Object(),但当我尝试toCharray()时,它会说referencetype有问题
我也可以使用Char()数组对单词进行排序吗?您可以简单地使用数组类型作为参数,并将数组发送到更通用的方法 在该方法中,我检查该项是否实现了IComparable,如果实现了,则使用IComparable实现。如果不是,只需使用算法即可 然后,show方法还会显示阵列:
Sub Sort(ByRef items As Array)
For i As Integer = LBound(items) To UBound(items)
For j = i + 1 To UBound(items)
If (items(i).GetType() Is GetType(IComparable) AndAlso items(i).CompareTo(items(j)) > 0) OrElse items(i) > items(j) Then
Dim copy = items(j)
items(j) = items(i)
items(i) = copy
End If
Next
Next
End Sub
Sub Show(strTitle As String, items As Array)
Console.WriteLine(strTitle + vbCrLf + New String("-", strTitle.Length))
For Each item In items
Console.WriteLine("{0}", item)
Next
End Sub
Sub Main()
Dim strArray() As String = {"Test", "Abc", "Copy", "Sorter", "Bubble"}
Dim chrArray() As Char = {"a", "b", "q", "m", "j", "z", "c", "0"}
Dim intArray() As Integer = {5, 3, 7, 9, 10, 5464, 4, 1, 3, 3}
Sort(strArray)
Sort(chrArray)
Sort(intArray)
Show("Sorted strings", strArray)
Show("Sorted chars", chrArray)
Show("Sorted ints", intArray)
Console.ReadLine()
End Sub
您可以使用泛型和lambda这样做:
Sub SortArray(Of T)(arr As T(), isGreater As Func(Of T, T, Boolean))
For j = 0 To arr.Length
For i = 0 To arr.Length - 2
If isGreater(arr(i), arr(i + 1)) Then
Dim tmp = arr(i)
arr(i) = arr(i + 1)
arr(i + 1) = tmp
End If
Next
Next
End Sub
然后你可以这样称呼它:
Dim xs = { "D", "B", "C", "E", "F", "A" }
SortArray(xs, Function (x1, x2) x1 > x2)
使用这种方法,您可以对任何类型的数组进行排序。这是一个单行程序:
公共函数排序(Of T)(ByVal项作为IEnumerable(Of T))作为IEnumerable(Of T)
退货项目。订购人(功能(i)i)
端函数
然后你会这样称呼它:
Dim xs = { "D", "B", "C", "E", "F", "A" }
SortArray(xs, Function (x1, x2) x1 > x2)
Dim arr()作为字符串={…}可以是字符串或字符数组
arr=排序(arr).ToArray()
但是,由于这里的真正目标是学习泛型和基本排序算法,我可以指出一些需要使用现有代码才能工作的事情:
首先是这一行:
如果arr(i)>arr(i+1),则
问题在于
比较。对于任意两种随机类型,您无法确定是否定义了
运算符。相反,您需要这样写:
Dim xs = { "D", "B", "C", "E", "F", "A" }
SortArray(xs, Function (x1, x2) x1 > x2)
如果arr(i).CompareTo(arr(i+1))>0,则
此外,对于这项工作,您需要声明排序方法,以便将其约束到IComparable接口,如下所示:
Dim xs = { "D", "B", "C", "E", "F", "A" }
SortArray(xs, Function (x1, x2) x1 > x2)
Public子排序(T的可比性)(ByVal arr()的可比性为T)
如果这样做,那么原始代码的其余部分应该可以正常工作,而无需进一步更改 不能同时使用
String()
吗?String
变量可以包含Char
Char是否实现IComparable?根据编译器的说法,没有