我使用DirectoryInfo.GetFileSystemInfos()
方法从五个不同的目录创建了五个FileSystemInfo()
数组。
我需要知道如何将所有五个FileSystemInfo
数组组合到一个集合中,或者如何从五个不同的目录中获取一个FileSystemInfo
集合。
例如:
Dim dir1 As New DirectoryInfo(str_fromPath1)
Dim dir2 As New DirectoryInfo(str_fromPath2)
Dim dir3 As New DirectoryInfo(str_fromPath3)
Dim dir4 As New DirectoryInfo(str_fromPath4)
Dim dir5 As New DirectoryInfo(str_fromPath5)
Dim FSinfo1 As FileSystemInfo() = dir1.GetFileSystemInfos
Dim FSinfo2 As FileSystemInfo() = dir2.GetFileSystemInfos
Dim FSinfo3 As FileSystemInfo() = dir3.GetFileSystemInfos
Dim FSinfo4 As FileSystemInfo() = dir4.GetFileSystemInfos
Dim FSinfo5 As FileSystemInfo() = dir5.GetFileSystemInfos
Dim SINGLE_FSinfo_ALL As FileSystemInfo ???
您可以将所有数组分组到单个容器中,并使用 Linq 的SelectMany()
从包含的所有子数组的内容生成List(Of FileSystemInfo)
。
或者以类似的方式创建一个新数组:
从所有现有数组生成List(Of FileSystemInfo)
:
Dim fsInfoList = {FSinfo1, FSinfo2, FSinfo3}.SelectMany(Function(arr) arr).ToList()
或者生成一个新的FileSystemInfo()
数组,它是所有其他数组的总和:
Dim fsInfo_All() = {FSinfo1, FSinfo2, FSinfo3}.SelectMany(Function(arr) arr).ToArray()
或者生成一个FileSystemInfo()()
交错数组。
在这种情况下,单个数组集合中的所有元素都与其他元素不同,并且仍然可以使用旧索引访问:
Dim fsInfo_All = {FSinfo1, FSinfo2, FSinfo3}
► 另一种可能性。为什么不从一开始就将FileInfo()
数组组织在一个集合中,然后在需要时提取所有(或子集(的内容?
例如,使用Dictionary(Of String, FileSystemInfo())
:
Dim allDirectories As New Dictionary(Of String, FileSystemInfo())()
allDirectories.Add("Some Path", New DirectoryInfo(SomePath).GetFileSystemInfos())
allDirectories.Add("Search Result", New DirectoryInfo(AnotherPath).GetFileSystemInfos())
' fsInfoAll is a List(Of FileSystemInfo)
Dim fsInfoAll = allDirectories.SelectMany(Function(dict) dict.Value).ToList()
在这种情况下,还可以按键或索引访问单个集合。
像这样
Dim SINGLE_FSinfo_ALL As New List(Of FileSystemInfo)
SINGLE_FSinfo_ALL.AddRange(FSinfo1)
SINGLE_FSinfo_ALL.AddRange(FSinfo2)
'... etc.