2015-03-05 4 views
0

пожалуйста, посмотрите вверхSort-Object с неожиданными результатами Get-Variable

Get-Variable | Sort-Object -property Value 

в вашей PowerShell строке. Вероятно, вы увидите, что значения полностью отсортированы. Существует какая-то сортировка, некоторые блоки, похоже, были отсортированы, но между ними есть - по крайней мере, в моем PowerShell (V4) множество предметов, расположенных на совершенно абсурдных позициях.

Может ли кто-нибудь пролить свет на то, почему в этом случае сбой Sort-Object?

Thx

Armin.

+0

Что вы считаете не провалом? Эти переменные имеют значения дико отличающихся (несравнимых) типов. Возможно, вы ожидали, что их сортируют по порядку, который они имели бы, если бы все они были преобразованы в строки? –

ответ

3

Порядок между двумя объектами разных типов не определен (если явно не определено). Таким образом, когда вы пытаетесь сортировать объекты, вы не можете ожидать, что они последуют тому, что, по вашему мнению, имеет смысл или даже к реальной логике.

Если вы преобразуете их в общий тип, например, путем преобразования их в строку сначала, вы получите правильный заказ:

Get-Variable | sort { [string] $_.Value } 
+0

Короче: 'sort {[string] $ _. Value}'; литье может обрабатывать нули. –

+0

@JeroenMostert Клянусь, я делал это раньше, и мне это не удалось .. но теперь это работает, спасибо! ;) – poke

+0

Спасибо за образец ... Я понял, где моя ошибка мышления, ожидая сортировки строки, когда вывод по умолчанию объектов не является строкой. Ваш образец исправляет это, бит, если вы попробуете его и посмотрите внимательно, что некоторые значения все еще намазаны, например. PSDefaultParameterValues, PSBoundParameters и args, они, очевидно, все разрешают пустые массивы {}, но на выходе они не сортируются вместе. Разве это несоответствующее поведение? – Armin

1

Причина, по которой трудно провести сортировку результатов, как и следовало ожидать, потому что все значения имеют разные типы данных. Несмотря на то, что то, что вы видите, это строковые значения, каждое из этих значений имеет определенный тип данных, такой как string, integer, boolean и многое другое. Не существует согласованного набора правил, который правильно сортирует все эти значения. Если вы будете делать то же самое с именами переменных, а не со значениями, вы увидите последовательный сортировку - это потому, что имена переменных по существу являются строковыми значениями и могут быть легко отсортированы в алфавитном порядке.

+0

Спасибо за разъяснение этого, это прекрасно объяснение, которое я искал. – Armin

Смежные вопросы