Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays char()和string()的泛型数组类型_Arrays_Vb.net_Sorting - Fatal编程技术网

Arrays 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

我在学校学习排序算法,我们应该对所有字符进行排序,然后实现单词排序

我使用了一个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既可以是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?根据编译器的说法,没有