Проверка эффективности для сортировки таблицы данных - PullRequest
0 голосов
/ 17 сентября 2018

Это достаточно общий вопрос, но мне интересно, может ли какой-нибудь гуру PS посоветовать, насколько эффективен мой метод сортировки и рекомбинации некоторых полей данных с использованием массива PSCustomObjects.

Я импортирую файл CSV, который содержит ряд личных данных, в том числе полные имена в одном поле, которые имеют различные разделители между именами и фамилиями (например, запятая, пробел, запятая + пробел, точка с запятой и т. Д.).Фамилия на первом месте.Санация этих вариантов также является целью.

Набор данных должен быть отсортирован по фамилии и повторно собран с одним полем FullName.Простая сортировка по полю FullName не работает надежно, учитывая разнообразие разделителей между частями имени.

Я попытался создать массив новых PSCustomObjects, который включает в себя все исходные поля из CSVплюс поле полного имени, разделенное на два новых поля имени.Затем он сортируется по фамилии, и результаты сохраняются в новом массиве, готовом к выводу, объединяя поля разделенных ранее имен вместе с запятой и пробелом.

Любые предложения по повышению эффективности приветствуются.

$data = import-csv .\Cust.csv
# CSV fields: FullName, StreetAddress, City, Postcode
# Create a temporary array for sorting
$splitNames = @()
$data | foreach {
    $spltName = $_.FullName -split '[\s|,|;]+'
    $splitNames += [PSCustomObject]@{
        Last = $spltName[0]
        First = $spltName[1]
        StreetAddress = $_.StreetAddress
        City = $_.City
        Postcode = $_.Postcode
    }
}
# Create an output array to hold the final result
$sortedNames = @()
# Sort the temporary array by lastname, rejoin name field and add to output array
$splitNames | Sort Last | foreach {
    $FullName = $_.Last, $_.First -join ', '
    $sortednames += [PSCustomObject]@{
        FullName = $Fullname
        StreetAddress = $_.StreetAddress
        City = $_.City
        Postcode = $_.Postcode
    }
}
$sortednames
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...