char()和string()的通用数组类型

时间:2014-11-25 22:10:40

标签: 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可以是Char()和String()?

我试过了:

If bolWords Then
    Dim arr As String()
Else
    Dim arr As Char()
End If

但是由于范围的原因,它表示它未被宣布。我也试过Object(),但是当我做ToCharArray()时,它说引用类型有问题。

我可以使用Char()数组来排序单词吗?

3 个答案:

答案 0 :(得分:1)

您可以简单地使用Array类型作为参数,并可以将您的数组发送到更通用的方法。

在方法中,我检查项是否实现了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

答案 1 :(得分:1)

你可以用泛型和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)

使用这种方法,您可以对任何类型的数组进行排序。

答案 2 :(得分:0)

这是一个单行:

Public Function Sort(Of T)(ByVal Items As IEnumerable(Of T)) As IEnumerable(Of T)
    Return Items.OrderBy(Function(i) i)
End Function

然后你就这样称呼它:

Dim arr() As String = { ... } ' could be a string or a character array
arr = Sort(arr).ToArray()

但是,由于这里的真正目标是了解泛型和基本排序算法,我可以指出您需要对现有代码执行的一些操作:

首先是这一行:

If arr(i) > arr(i + 1) Then

问题是>比较。对于任何两种随机类型,您无法确定>运算符是否已定义。相反,你需要这样写:

If arr(i).CompareTo(arr(i + 1)) > 0 Then

此外,对于这项工作,您需要声明您的排序方法,以便将其约束到IComparable接口,如下所示:

Public Sub Sort(Of T As IComparable)(ByVal arr() As T)

如果您这样做,那么原始代码的其余部分应该无需进一步更改即可运行。