我有一个多维数组,想要按日期排序并删除重复的条目(按日期)。
$arrayPlaces = [System.Collections.ArrayList]@()
这就是Array的样子:
$arrayPlaces.Add(($mailBarcodeInformation[2], $mailScannedStart.Substring(22), "", "", "", "", "", ""))
以后填写空白字段。第二个字段$mailScannedStart.Substring(22)
是时间,数组应按其排序,并且还应删除重复项。
我搜索了很多但找不到任何帮助。
答案 0 :(得分:2)
一种常见的方法是将自定义对象添加到数组中并使用buit-in cmdlet sort -unique
。它更具可读性:
$arrayPlaces = [System.Collections.ArrayList]@()
#.........
$arrayPlaces.Add([PSCustomObject]@{
barcode = $mailBarcodeInformation[2]
time = $mailScannedStart.Substring(22)
foo1 = ''
foo2 = ''
foo3 = ''
}) >$null
#...........
$sorted = $arrayPlaces | sort time -Unique
但是,由于您已经使用了.NET类,因此可以切换到快速的.NET SortedDictionary,它会在添加项目时自动对集合进行排序和重复数据删除:
$arrayPlaces = [Collections.Generic.SortedDictionary[string,array]]@{}
添加和覆盖旧值:
$key = $mailScannedStart.Substring(22)
$arrayPlaces[$key] = $mailBarcodeInformation[2], $key, "", "", "", "", "", ""
使用密钥检查项目是否存在:
if ($arrayPlaces.ContainsKey($key)) { ....... }
卸下:
[void]$arrayPlaces.Remove('foo')
访问:
$items = $arrayPlaces['foo']
$item = $arrayPlaces['foo'][0]
枚举(更快):
foreach ($items in $arrayPlaces.Values) {
# .........
}
枚举/流水线(较慢):
$arrayPlaces.Values | foreach { $_[0] = $_[1] + $[2] }