Следующий список не сортировать правильно (ИМХО):Powershell Сортировка строк, подчеркивания
$a = @('ABCZ', 'ABC_', 'ABCA')
$a | sort
ABC_
ABCA
ABCZ
Мой удобный ASCII диаграммы и Unicode C0 управления и Basic Latin диаграмма имеют подчеркивание (низкая линия) с порядковым номером из 95 (U + 005F). Это больше, чем заглавные буквы A-Z. Сортировка должна была бы положить строку, заканчивающуюся последним символом подчеркивания.
Get-Культура ан-США
Следующий набор команд делает то, что я ожидал:
$a = @('ABCZ', 'ABC_', 'ABCA')
[System.Collections.ArrayList] $al = $a
$al.Sort([System.StringComparer]::Ordinal)
$al
ABCA
ABCZ
ABC_
Теперь я создаю файл в кодировке ANSI, содержащий те же 3 строки:
Get-Content -Encoding Byte data.txt
65 66 67 90 13 10 65 66 67 95 13 10 65 66 67 65 13 10
$a = Get-Content data.txt
[System.Collections.ArrayList] $al = $a
$al.Sort([System.StringComparer]::Ordinal)
$al
ABC_
ABCA
ABCZ
Снова строка, содержащая символ подчеркивания/нижней линии, не отсортирована правильно. Что мне не хватает?
Edit: ссылка
Давайте этот пример # 4:
'A' -lt '_'
False
[char] 'A' -lt [char] '_'
True
Похоже, что оба утверждения должны быть Ложные или оба должны быть правдой. Я сравниваю строки в первом утверждении, а затем сравниваю тип Char. Строка - это просто набор типов Char, поэтому я думаю, что две операции сравнения должны быть эквивалентными.
И теперь, например, # 5:
Get-Content -Encoding Byte data.txt
65 66 67 90 13 10 65 66 67 95 13 10 65 66 67 65 13 10
$a = Get-Content data.txt
$b = @('ABCZ', 'ABC_', 'ABCA')
$a[0] -eq $b[0]; $a[1] -eq $b[1]; $a[2] -eq $b[2];
True
True
True
[System.Collections.ArrayList] $al = $a
[System.Collections.ArrayList] $bl = $b
$al[0] -eq $bl[0]; $al[1] -eq $bl[1]; $al[2] -eq $bl[2];
True
True
True
$al.Sort([System.StringComparer]::Ordinal)
$bl.Sort([System.StringComparer]::Ordinal)
$al
ABC_
ABCA
ABCZ
$bl
ABCA
ABCZ
ABC_
Два ArrayList содержат одни и те же строки, но сортируются по-разному. Зачем?
Я думаю, что вам не хватает того, что вы ожидаете нестандартных ответов от Windows. Он всегда имеет приоритет перед символами, просто взгляните на файловую систему. Создавайте файлы с этими именами, сортируйте их по имени, и они будут сортировать их одинаково с ABC_ в первую очередь. – TheMadTechnician
[Сортировка строк уже не выполняется с помощью кода ASCII.] (Http://blogs.msdn.com/b/oldnewthing/archive/2004/05/18/134051.aspx) –
Также, насколько я могу судить странность со второй частью имеет какое-то отношение к 'ArrayList'. Использование строго типизированного 'String.Collections.Generic.List [string]' сортируется, как ожидалось. Кроме того, используя 'string []' сортирует, как ожидалось, с 'Array :: Sort', но' object [] 'не делает. –