gpt4 book ai didi

.net - 在 vb.net 中对类数组进行排序

转载 作者:行者123 更新时间:2023-12-01 23:41:58 25 4
gpt4 key购买 nike

我花了 2 天时间在互联网上搜索,试图找到对由一类字符串和整数组成的数组进行简单排序的解决方案(仅按可能包含不规则字符的字符串元素中的一个)。请帮忙!我已经根据微软的例子创建了一个我想做的简化代码:

Public Class Form1
Class car
Public Make As String = ""
Public Year As Integer = 0
End Class

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim arrayOfCars() As car
Dim arrayElement As Integer = 0

'Exploded simplified loop to fill the array (original has 20 objects in the class
'and the array grows depending on input to no more than a few hundred.
ReDim arrayOfCars(0)
arrayOfCars(0) = New car
arrayOfCars(0).Make = "Ford"
arrayOfCars(0).Year = 1992
ReDim Preserve arrayOfCars(1)
arrayOfCars(1) = New car
arrayOfCars(1).Make = "Fiat"
arrayOfCars(1).Year = 1988
ReDim Preserve arrayOfCars(2)
arrayOfCars(2) = New car
arrayOfCars(2).Make = "Buick"
arrayOfCars(2).Year = 1932
ReDim Preserve arrayOfCars(3)
arrayOfCars(3) = New car
arrayOfCars(3).Make = "Ford"
arrayOfCars(3).Year = 1932
ReDim Preserve arrayOfCars(4)
arrayOfCars(4) = New car
arrayOfCars(4).Make = "Dodge"
arrayOfCars(4).Year = 1999
ReDim Preserve arrayOfCars(5)
arrayOfCars(5) = New car
arrayOfCars(5).Make = "Honda"
arrayOfCars(5).Year = 1977

'view array before sort
For i = 0 To 5
Debug.WriteLine(arrayOfCars(i).Make & vbTab & arrayOfCars(i).Year)
Next
Debug.WriteLine("*************************")

'sort array by the string component [Make]
'Array.Sort(arrayOfCars)
'arrayOfCars = arrayOfCars.OrderBy(Function(car) car.Make)
'????????????????

'view array after sort
For i = 0 To 5
Debug.WriteLine(arrayOfCars(i).Make & vbTab & arrayOfCars(i).Year)
Next
End Sub
End Class

最佳答案

如果您想按 Make 属性排序,一种开箱即用的方法是使用 Array.Sort使用 Comparison(Of T) 重载:

Array.Sort(arrayOfCars, Function(car1 As Car, car2 as Car)
Return car1.Make.CompareTo(car2.Make)
End Function)

请注意,您应该注意 Nothing 或(更有可能)MakeNothing 的汽车。两者都会导致 NullReferenceException。因此你可以使用:

Array.Sort(arrayOfCars, Function(car1 As Car, car2 As Car)
If Object.ReferenceEquals(car1,car2)
return 0
Else if car1 is nothing
Return -1
Else if car2 is nothing
Return 1
Else
return String.Compare(car1.Make, car2.Make)
End If
End Function)

另一种(效率稍低,因为它需要重新创建数组)方法是 LINQ:

Dim orderedCars = from car in arrayOfCars
order by car.Make Ascending
arrayOfCars = arrayOfCars.ToArray()

LINQ 方法更易于维护且更易于阅读,但它需要创建一个新数组。因此,如果您不想修改原始数组,则应该使用它。

一般来说,如果你想添加对象,你不应该使用数组,因为数组是固定大小的集合。使用 List(Of Car) 代替,它有一个 Add method .

另一个挑剔,遵循 .NET 命名/capitalization conventions ,使用 Car 而不是 car

关于.net - 在 vb.net 中对类数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36470183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com