vb.net array.sort() 参数为什么 1 短?

  • 本文关键字:参数 array net sort vb vb.net
  • 更新时间 :
  • 英文 :


我正在使用这样的代码对数组进行排序:

Array.Sort(arr, 0, intEndingPosition, New myIComparer)

我希望排序以索引0开头,以索引intEndingPosition结束。但是,最后一个元素arr(intEndingPosition)被省略了,没有被排序。为什么?


intEndingPosition是预先计算的,如下所示:

Dim StringOfConcern As String
Dim OneChar(65534), FrqOne(65534) As String
Dim CntNewOnes, CntRptOnes As Integer
Dim c As Char
Dim i, j As Integer
Dim isNew As Boolean
StringOfConcern = TextBox1.Text
OneChar(0) = CStr(StringOfConcern(0))
FrqOne(0) = 1
i = 0
j = 0 
For Each c In StringOfConcern.Substring(1)
isNew = True
For j = 0 To i Step 1
If CStr(c) = OneChar(j) Then
isNew = False
FrqOne(j) += 1
Exit For
End If
Next j
If isNew = True Then
i += 1
OneChar(i) = CStr(c)
FrqOne(i) = 1
End If
Next c
CntNewOnes = i + 1
CntRptOnes = 0 
For i = 0 To CntNewOnes - 1 Step 1
If FrqOne(i) > 1 Then CntRptOnes += 1
Next i

排序如下。我最初问题中的代码只是说明性的。实际排序为:

Array.Sort(FrqOne, OneChar, 0, CntNewOnes - 1)
Array.Reverse(FrqOne, 0, CntNewOnes - 1)
Array.Reverse(OneChar, 0, CntNewOnes - 1)

注意 Array.Sort 的方法声明

Public Shared Sub Sort (
array As Array,
index As Integer,
length As Integer,
comparer As IComparer
)

第三个参数是要排序的范围内的元素数(length),而不是您建议的结束索引。

因此,让我们假设您的intEndingPosition4。这意味着您希望对 5 个元素进行排序,即索引0, 1, 2, 3, 4处的元素。但是,4的数字长度而不是结束索引,因此您只在索引0, 1, 2, 3对元素进行排序。

这就解释了为什么您观察到正在排序的元素比您预期的要短一个。

简单地说,第三个参数应该指定要排序的元素的长度,而不是结束索引。

再比如:

考虑String类的Substring方法:

Public Function Substring (
startIndex As Integer,
length As Integer
) As String

然后假设我们有这段代码:

Dim temp As String = "testing"
Dim result As String = temp.Substring(0, 4)

result现在是一个包含4字符的字符串,因为Substring调用中的4表示应检索的长度,而不是结束索引。

如果4是结束索引,那么您会期望result包含 5 个字符。

相关内容

最新更新