Arrays.sort(). Сортировка массива строк по длине
У меня такое странное задание: надо отсортировать массив строк по возрастанию длины, причем именно с использованием Arrays.sort(arr). Я сделал сортировку циклами но мне сказали что надо именно sort(), но у него нет перегрузки с String. Есть только странная фигня
public static void sort(T[] a, Comparator c)
Наверно она нужна, ноя что-то не врубаюсь как она работает. Объясните что значит:
Comparator
Отслеживать
36.1k 2 2 золотых знака 56 56 серебряных знаков 83 83 бронзовых знака
задан 6 дек 2016 в 18:20
5,327 11 11 золотых знаков 58 58 серебряных знаков 117 117 бронзовых знаков
T — тип элементов, Comparator — функция производящая сравнение, на основе которого определяется порядок элементов
6 дек 2016 в 18:22
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Класс, где определяем порядок сравнения:
class StringLengthSort implements Comparator < @Override public int compare(String o1, String o2) < if(o1.length() >o2.length())< return 1; >else< if(o1.length() < o2.length())< return -1; >else < return 0; >> > >
или через лямбды, код будет немного короче:
Comparator comprator = (o1,o2) -> o1.length() - o2.length();
public static void main(String[] args) < String [] names = ; Comparator stringLengthComparator = new StringLengthSort(); for(String str : names) < System.out.println(str); >Arrays.sort(names, stringLengthComparator); // применяем сортировку System.out.println("\nотсортировано\n"); for(String str : names) < System.out.println(str); >>
Deaaaaaaan Deaaan Deaaaaaaaan Dean Deaaaaaan Deaan Deaaaaaaaaan Deaaaan Deaaaaan отсортировано Dean Deaan Deaaan Deaaaan Deaaaaan Deaaaaaan Deaaaaaaan Deaaaaaaaan Deaaaaaaaaan
Практическое руководство. Сортировка массива в Visual Basic
В этой статье приведен пример сортировки массива строк в Visual Basic.
Пример
В этом примере объявляется массив String объектов с именем zooAnimals , заполняется и сортируется в алфавитном порядке:
Private Sub SortAnimals() Dim zooAnimals(2) As String zooAnimals(0) = "lion" zooAnimals(1) = "turtle" zooAnimals(2) = "ostrich" Array.Sort(zooAnimals) End Sub
Отказоустойчивость
При следующих условиях возможно возникновение исключения:
- Массив пуст (ArgumentNullException класс).
- Массив является многомерным (RankException класс).
- Один или несколько элементов массива не реализуют IComparable интерфейс (InvalidOperationException класс ).
См. также
- Array.Sort
- Массивы
- Устранение неполадок, связанных с массивами
- Коллекции
- Оператор For Each…Next
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Сортировка массива строк по алфавиту
Отсортировать массив строк по алфавиту. Учитывать только первый символ каждой строки.
Решение данной задачи мало чем отличается от сортировки чисел, так как буквы алфавита в таблице кодов символов следуют друг за другом. Это значит, например, что буква ‘a’ имеет код на единицу меньше, чем ‘b’. При этом в Паскале не обязательно получать коды букв, можно непосредственно сравнивать сами буквы.
Для того чтобы получить первую букву строки, являющейся элементом массива, надо учесть, что строка сама по себе является своеобразным массивом. Другими словами, мы имеем дело с двумерным массивом. Чтобы извлечь первый элемент вложенных массивов, надо указать второй индекс равный 1. Например, str[i][1] , где i — это текущий элемент массива строк, а 1 — первый символ.
В задаче ниже выбрана сортировка пузырьком. Строки, начинающиеся с букв, которые стоят позже по алфавиту, постепенно переставляются в конец массива.
Программа на языке Паскаль:
const N = 5; var str: array[1..N] of string[20]; s: string[20]; i, j: byte; begin for i:=1 to N do readln(str[i]); for i:=1 to N-1 do for j:=1 to N-i do if str[j][1] > str[j+1][1] then begin s := str[j]; str[j] := str[j+1]; str[j+1] := s; end; writeln; for i:=1 to N do write(str[i], ' '); writeln; end.
Пример выполнения программы:
one two three four five four five one two three
Как отсортировать массив строк
Вопрос такой, есть массив, в нём наименование, цена, количество, нужно отсортировать записи массива по количеству. Как лучше это сдеать, думаю через таблицу значений, чет не помню как делается.
ДенисЧ продал все СП и тебе ничего не осталось?
ТаблицаЗначений (ValueTable)
Сортировать (Sort)
Синтаксис:
Тип: Строка.
Список имен колонок, разделенных запятыми, по которым производится сортировка таблицы. После каждого имени колонки через пробел может быть указано направление сортировки. Направление определяется: «Убыв» («Desc») — упорядочивать по убыванию; «Возр» («Asc») — упорядочивать по возрастанию. По умолчанию сортировка производится по возрастанию. Порядок указания имен колонок таблицы определяет порядок сортировки. Это означает, что сначала таблица сортируется по колонке, указанной первой. Затем группы строк с одинаковым значением в этой колонке сортируются по колонке, которая указана второй, и так далее.
а справку почитать религия не позволяет.
(1) А как массив передать в таблицу значений и выгрузить обратно?
в массиве не может быть «наименование, цена, количество»
Там только одно значение на элемент
(3)
ТаблицаЗначений (ValueTable)
ЗагрузитьКолонку (LoadColumn)
Синтаксис:
Тип: Массив.
Массив значений, который выступает в качестве источника данных для колонки.
(обязательный)
Тип: Число; Строка; КолонкаТаблицыЗначений.
Колонка, в которую будут загружены значения из массива. В качестве значения параметра может выступать индекс колонки, имя колонки, сама колонка.
Описание:
Загружает колонку таблицы значений из массива значений.
Сервер, толстый клиент, внешнее соединение.
Примечание:
Значения из массива загружаются в колонку в порядке индексов.
Пример:
ТаблицаРезультат = Новый ТаблицаЗначений;
Для каждого ИмяКолонки Из МассивИменКолонок Цикл
ТаблицаРезультат.Колонки.Добавить(ИмяКолонки);
КонецЦикла;
// Создадим пустые строки таблицы
Для Н=1 По СтрокиДереваЗначений.Количество() Цикл
ТаблицаРезультат.Добавить();
КонецЦикла;
// Скопируем значения колонок
Для каждого ИмяКолонки Из МассивИменКолонок Цикл
ЗначенияКолонки = СтрокиДереваЗначений.ВыгрузитьКолонку(ИмяКолонки);
ТаблицаРезультат.ЗагрузитьКолонку(ЗначенияКолонки, ИмяКолонки);
КонецЦикла;
——————
+ не забыть, что двумерный массив есть массив массивов.
У него небось массив структур.
(3) а как ты в массив эти данные закачал.
+(7) возврат серверной функции в клиент?
(6) Массив строк 🙂 Методом найти строки в таблице значений. Возвращает массив строк, и че теперь с ним делать. Нужно бы отсортировать как то по количеству.
(9) может сортировать таблицу значений, а потом из нее получать массив строк?
(9) Создай новую ТЗ. Перепиши туда эти строки
(9) ТаблицаЗначений (ValueTable)
Скопировать (Copy)
Вариант синтаксиса: Скопировать строки
Тип: Массив.
Массив строк для копирования. Если не указан, копируются все строки таблицы значений.
(9)
да почитайте Вы справку по ТЗ. там есть ответ на ваш вопрос.
хватит тупить.
(9) Продам СП за серебряное колечко) Размер 18,5 😉
(0) ээ кхм я так понял в массиве какие-то строки? Из ТЗ? или из чего?
Сначала отсортируй
Затем загоняй в массив. И делов-то)
Функция СортировкаПузырьком(МассивЭлементов) Экспорт
// Количество просмотров массива — по количеству числа его элементов
Для просмотр = 0 По МассивЭлементов.Количество()-1 Цикл
// Собственно, просмотр массива
Для индекс = 0 По МассивЭлементов.Количество()-1 Цикл
// Если достигли конца массива то прервём цикл,
// чтобы не выполнять условие ниже
Если индекс = МассивЭлементов.Количество()-1 Тогда
Прервать;
КонецЕсли;
// Сравнение элементов и их перестановка (если требуется)
Если МассивЭлементов[индекс].МоеКоличество > МассивЭлементов[индекс+1].МоеКоличество Тогда
СтаршийЭлемент = МассивЭлементов[индекс];
МладшийЭлемент = МассивЭлементов[индекс+1];
МассивЭлементов[индекс] = МладшийЭлемент;
МассивЭлементов[индекс+1] = СтаршийЭлемент;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Возврат МассивЭлементов;
КонецФункции
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn