Как я могу отсортировать массив строк?

.eProto_Pool является свойством $Task. Если вы хотите разыменовать (то есть получить одно единственное свойство объекта) внутри строки, вам нужно заключить строку в $(), оператор подвыражения в PowerShell.

Например, я создам новую хеш-таблицу с именем $MyString, которая имеет два свойства.

$MyString = @{Name = "Stephen";Value="CoolDude"}

>$MyString

Name                           Value
----                           -----
Value                          CoolDude
Name                           Stephen

Посмотрите, что произойдет, если я попытаюсь сослаться на него внутри строки с обычным расширением строки. Это в основном то, что вы делали в своем примере выше. Посмотрите, как это работает не так, как вы ожидаете?

write-host " The user $MyString.Name is a $MyString.Value"
 The user System.Collections.Hashtable.Name is a System.Collections.Hashtable.Value

Время использовать оператор подвыражения для сохранения дня.

write-host " The user $($MyString.Name) is a $($MyString.Value)"
 The user Stephen is a CoolDude

Когда сомневаешься, подвыражай это.

На второй взгляд

Я думаю, что это может быть знак процента %, который вызывает у вас горе. Это сокращение для команды ForEach-Object в PowerShell. Попробуйте вместо этого:

Invoke-expression "$appcmd --% set config -section:system.applicationHost/applicationPools /+`"`"[name='$($Task.eProto_Pool)'].environmentVariables.[name='PRODUCT_NAME',value='eProto']`"`" /commit:apphost`""

Это должно экранировать нужные вам строки, а также передавать параметры, как свойство eProto_Pool в $Task.

6
задан Tim 14 September 2012 в 21:54
поделиться

7 ответов

Хороший вопрос!! Сортировка является, вероятно, самым важным понятием для изучения как подающий надежды программист.

Существует на самом деле много различных алгоритмов для сортировки списка.

При разрушении всех тех алгоритмов самая фундаментальная операция является сравнением двух объектов в списке, определяя их "естественный порядок".

Например, для сортировки списка целых чисел, мне была бы нужна функция, которая говорит мне, учитывая любые двух целочисленных X и Y, является ли X меньше, чем, равный, или больше, чем Y.

Для Ваших строк Вам будет нужно то же самое: функция, которая говорит Вам, какая из строк имеет "меньшее" или "большее" значение, или равны ли они.

Традиционно, эти функции "компаратора" выглядят примерно так:

int CompareStrings(String a, String b) {
   if (a < b)
      return -1;
   else if (a > b)
      return 1;
   else
      return 0;
}

Я не учел некоторые детали (как, как Вы вычисляете ли меньше, чем или больше, чем b? подсказка: выполните итерации через символы), но это - основной скелет любой функции сравнения. Это возвращает значение меньше, чем нуль, если первый элемент меньше и значение, больше, чем нуль, если первый элемент больше, возвращая нуль, если элементы имеют равное значение.

Но что это имеет отношение к сортировке?

Маршрутизация вида вызовет ту функцию для пар элементов в Вашем списке, с помощью результата функции, чтобы выяснить, как перестроить объекты в отсортированный список. Функция сравнения определяет "естественный порядок", и "алгоритм сортировки" определяет логику для вызова и ответа на результаты функции сравнения.

Каждый алгоритм похож на стратегию большого изображения гарантии, что ЛЮБОЙ вход будет правильно отсортирован. Вот несколько алгоритмов, о которых Вы, вероятно, захотите знать:

Пузырьковая сортировка:

Выполните итерации через список, вызвав функцию сравнения для всех смежных пар элементов. Каждый раз, когда Вы получаете результат, больше, чем нуль (подразумевать, что первый элемент больше, чем второй), подкачайте два значения. Затем движение к следующей паре. Когда Вы добираетесь в конец списка, если Вы не должны были подкачивать пар, затем поздравления, список отсортирован! Если Вы, DID должен выполнить любые подкачки, возвращаетесь к началу и запускаетесь. Повторите этот процесс, пока больше не будет подкачек.

Примечание: это обычно - не очень эффективный способ отсортировать список, потому что в худших случаях, он мог бы потребовать, чтобы Вы просканировали целый список столько же сколько N времена для списка с элементами N.

Сортировка слиянием:

Это - один из самых популярных алгоритмов делить-и-побеждать для сортировки списка. Основная идея состоит в том, что, если у Вас есть два уже отсортированных списка, легко объединить их. Только запустите с начала каждого списка и удалите первый элемент того, какой бы ни список имеет самое маленькое начальное значение. Повторите этот процесс, пока Вы не использовали все объекты из обоих списков, и затем Вы сделаны!

1     4        8     10    
   2     5  7     9
------------ becomes ------------> 
1  2  4  5  7  8  9  10

Но что, если у Вас нет двух отсортированных списков? Что, если у Вас есть всего один список и его элементы, находится в произвольном порядке?

Это - умная вещь о сортировке слиянием. Можно повредить любой единственный список в мелкие кусочки, каждые из которых являются или неотсортированным списком, отсортированным списком или единственным элементом (который, если Вы вещь об этом, на самом деле отсортированный список, с длиной = 1).

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

Примечание: Этот алгоритм намного лучше, чем метод "пузырька", описанный выше, с точки зрения его эффективности худшего варианта развития событий. Я не войду в подробное объяснение (который включает некоторую довольно тривиальную математику, но занял бы время для объяснения), но быстрая причина увеличенной эффективности состоит в том, что этот алгоритм повреждает свою проблему в блоки идеального размера и затем объединяет результаты тех блоков. Алгоритм пузырьковой сортировки занимается всем этим сразу, таким образом, он не извлекает пользу из "делить-и-побеждать".


Это - всего два алгоритма для сортировки списка, но существует много других интересных методов, каждого с его собственными преимуществами и недостатками: Быстрая сортировка, Вид Основания, Вид Выбора, Пирамидальная сортировка, Вид Shell и Блочная сортировка.

Интернет переполняется с интересной информацией о сортировке. Вот хорошее место для запуска:

http://en.wikipedia.org/wiki/Sorting_algorithms

13
ответ дан 8 December 2019 в 13:03
поделиться

Создайте консольное приложение и вставьте это в Program.cs как тело класса.

public static void Main(string[] args)
{
    string [] strList = "a,b,c,d,e,f,a,a,b".Split(new [] { ',' }, StringSplitOptions.RemoveEmptyEntries);

    foreach(string s in strList.Sort())
        Console.WriteLine(s);
}

public static string [] Sort(this string [] strList)
{
    return strList.OrderBy(i => i).ToArray();
}

Заметьте, что я действительно использую созданный в методе, OrderBy. Как другая точка ответов там много различных алгоритмов сортировки, которые Вы могли реализовать там, и я думаю, что мой фрагмент кода делает все для Вас кроме фактического алгоритма сортировки.

Некоторые определенные учебные руководства по сортировке C#

3
ответ дан 8 December 2019 в 13:03
поделиться

Существует вся область исследования, созданного вокруг сортировки алгоритмов. Можно хотеть выбрать простой и реализовать его.

Хотя это не будет самым производительным, это не должно брать Вас слишком долго для реализации пузырьковой сортировки.

2
ответ дан 8 December 2019 в 13:03
поделиться

Если Вы не хотите использовать сборку в функциях, необходимо создать один Вашим сам. Я рекомендовал бы Пузырьковую сортировку или некоторый подобный алгоритм. Пузырьковая сортировка не является эффективным алгоритмом, но это сделало работы, и легко понять.

Вы найдете много хорошего чтения на Википедию.

0
ответ дан 8 December 2019 в 13:03
поделиться

Пузырьковая сортировка повреждает мозг.

Вид вставки, по крайней мере, как простой понять и кодировать, и на самом деле полезен на практике (для очень небольших наборов данных и почти отсортированных данных). Это работает как это:

Предположим, что первые n объекты уже в порядке (можно запустить с n = 1, так как, очевидно, одна вещь самостоятельно "в правильном порядке").

Возьмите (n+1) th объект в своем массиве. Назовите это "центром". Запуск с энного объекта и работа вниз:
  - если это больше, чем центр, переместите его одно пространство направо (для создания "разрыва" слева от него).
  - иначе оставьте его на месте, поместите "центр" одно пространство направо от него (то есть, в "разрыве" при перемещении чего-нибудь, или где это запустилось, если Вы ничего не переместили), и остановка.

Теперь первые n+1 объекты в массиве в порядке, потому что центр направо от всего меньшего, чем он, и слева от всего большего, чем он. Так как Вы запустили с n объектов в порядке, это - прогресс.

Повторитесь с увеличением n 1 на каждом шаге, пока Вы не обработали целый список.

Это соответствует одному способу, которым Вы могли бы физически поместить серию папок в специальный шкаф в порядке: вставьте тот; затем поместите другой в его правильное положение путем продвижения всего, что принадлежит после него одним пространством для создания места; повторитесь, пока не закончено. Никто никогда не сортирует физические объекты по пузырьковой сортировке, таким образом, это - тайна мне, почему это считают "простым".

Все, что это оставляют теперь, - то, что необходимо смочь удаться, учитывая две строки, больше ли первое, чем второе. Я не совсем уверен, под чем Вы подразумеваете "алфавитный и длина": алфавитный порядок сделан путем сравнения одного символа за один раз от каждой строки. Если там не то же, это - Ваш порядок. Если они - то же, смотрят на следующее, если Вы не вне символов в одной из строк, в этом случае это - то, которое это "меньше".

0
ответ дан 8 December 2019 в 13:03
поделиться

Я рекомендовал бы делать Wiki для quicksort.

Все еще уверенный, почему Вы не хотите использовать созданный в виде?

0
ответ дан 8 December 2019 в 13:03
поделиться

Используйте NSort

Я натыкался на библиотеку NSort несколько лет назад в книжном Windows Developer Power Tools. Библиотека NSort реализует много алгоритмов сортировки. Основное преимущество для использования чего-то как NSort по записи Вашей собственной сортировки, это, уже протестирован и оптимизирован.

0
ответ дан 8 December 2019 в 13:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: