使用 IO.FileInfo.Name 交换列表(文件信息)中的项目,因为它们在工作申请(求职信、简历、证书)中有意义
Swap the items in a List(of FileInfo) as they make sense in an job application (cover letter, CV, certificates) using the IO.FileInfo.Name
有一个 List(of FileInfo)
其中我有 4 个 pdf 文件的属性。列表应该这样排列,求职信在索引 0,简历在索引 1,证书在索引 2,另一个 sheet 在索引 3。我知道求职信是最后添加的,它是(在排序之前)因此在索引 3 处。我是故意这样做的。
3 个文件的名称(简历、证书、其他 sheet)始终相同。
我的问题是:有没有好的排序方式?
只有当有一些 属性 对象可以比较以确定哪个被认为较小,哪个被认为更大时,才能自动排序。这可以通过数字、日期、文本和任何其他实现 IComparable
and/or IComparable(Of T)
接口的类型自动完成。如果没有这样的 属性 那么您仍然可以在 Comparison(Of T)
委托或实现 IComparer
and/or [=15= 的 class 中执行您自己的手动比较].有关详细信息,请参阅我的三部分博客 post here。
举个例子,下面是使用 Comparison(Of T)
内联委托的方法:
Dim files As List(Of FileInfo)
'...
files.Sort(Function(fi1, fi2)
Dim fileNames = {"The First File.pdf",
"The Second File.pdf",
"The Third File.pdf",
"The Fourth File.pdf"}
Return Array.IndexOf(fileNames, fi1.Name).CompareTo(Array.IndexOf(fileNames, fi2.Name))
End Function)
在那个例子中,我将文件名(你说的是常量)放入一个数组中,从而将它们映射到数字(元素索引)。然后可以比较这些数字以确定列表中任意两个项目的相对顺序。您可以定义一个实现了 IComparer(Of T)
的 class(实现 IComparer
以及将非泛型实现委托给泛型实现被认为是一种很好的做法)并在其 Compare
方法。
有一个 List(of FileInfo)
其中我有 4 个 pdf 文件的属性。列表应该这样排列,求职信在索引 0,简历在索引 1,证书在索引 2,另一个 sheet 在索引 3。我知道求职信是最后添加的,它是(在排序之前)因此在索引 3 处。我是故意这样做的。
3 个文件的名称(简历、证书、其他 sheet)始终相同。
我的问题是:有没有好的排序方式?
只有当有一些 属性 对象可以比较以确定哪个被认为较小,哪个被认为更大时,才能自动排序。这可以通过数字、日期、文本和任何其他实现 IComparable
and/or IComparable(Of T)
接口的类型自动完成。如果没有这样的 属性 那么您仍然可以在 Comparison(Of T)
委托或实现 IComparer
and/or [=15= 的 class 中执行您自己的手动比较].有关详细信息,请参阅我的三部分博客 post here。
举个例子,下面是使用 Comparison(Of T)
内联委托的方法:
Dim files As List(Of FileInfo)
'...
files.Sort(Function(fi1, fi2)
Dim fileNames = {"The First File.pdf",
"The Second File.pdf",
"The Third File.pdf",
"The Fourth File.pdf"}
Return Array.IndexOf(fileNames, fi1.Name).CompareTo(Array.IndexOf(fileNames, fi2.Name))
End Function)
在那个例子中,我将文件名(你说的是常量)放入一个数组中,从而将它们映射到数字(元素索引)。然后可以比较这些数字以确定列表中任意两个项目的相对顺序。您可以定义一个实现了 IComparer(Of T)
的 class(实现 IComparer
以及将非泛型实现委托给泛型实现被认为是一种很好的做法)并在其 Compare
方法。