如何解决使用 IO.FileInfo.Name 交换 List(of FileInfo) 中的项目,因为它们在工作申请求职信、简历、证书中有意义
有一个 List(of FileInfo)
,其中我有 4 个 pdf 文件的属性。应该安排列表,以便求职信在索引 0,简历在索引 1,证书在索引 2 和另一个表在索引 3。我知道求职信是最后添加的,它是(排序之前)因此在索引 3 处。我是故意这样做的。
这三个文件的名字(简历、证书、另一张)总是一样的。
我的问题是:有没有一种很好的方式来对项目进行排序?
解决方法
只有当对象的某些属性可以进行比较以确定哪些被认为较小,哪些被认为较大时,才能自动进行排序。这可以通过数字、日期、文本和任何其他实现 IComparable
和/或 IComparable(Of T)
接口的类型自动完成。如果没有这样的属性,那么您仍然可以在 Comparison(Of T)
委托或实现 IComparer
和/或 IComparer(Of T)
的类中执行自己的手动比较。有关详细信息,请参阅我的三部分博文 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)
的类(实现 IComparer
并将非泛型实现委托给泛型实现被认为是一种很好的做法)并在其 Compare
中使用相同的逻辑方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。