#arrays #string #actionscript-3 #sorting
#массивы #строка #actionscript-3 #сортировка
Вопрос:
Я работаю над программой, в которой строка содержит несколько слов с разрывами строк между ними:
Bob
Mohammed
Alfred
Moses
Tom
etc
То, что я пытаюсь сделать, это отсортировать ее в алфавитном порядке как таковую:
Alfred
Bob
Mohammed
Moses
Tom
...
Насколько я знаю, это можно сделать только в массивах, но возможно ли сортировать элементы внутри строки?
Ответ №1:
Если для чего-то нет встроенной функции, просто создайте для нее свою собственную функцию. Это очень важно для программирования в целом.
Помните, что такое строка: это массив символов. В ActionScript 3.0 это не совсем верно в рамках фактического синтаксиса языка, но вы можете обойти это довольно легко. String.charAt()
возвращает вам символ с заданным индексом, и у вас есть целый ряд операций, чтобы фактически изменить порядок или количество символов в строке.
При этом, поскольку вы просто пытаетесь отсортировать отдельные слова, и поскольку они уже являются строчными, вы можете разделить символ новой строки, "n"
, который создаст массив. Затем вы сортируете этот массив. Я не помню, будет ли массив в AS3 изначально сортировать строки в алфавитном порядке — возможно, вы захотите это сделать в Google, но я думаю, что это так; если нет, то это просто восходит к тому, что говорилось в первом абзаце. Наконец, вы присоединяете массив к тому же символу.
Итак:
var arr:Array = nameString.split("n");
// sort the different elements within arr here; each one is one name
nameString = arr.join("n");
Комментарии:
1. О, не знал, что эти функции существуют, я довольно новичок в AS3, я знаю только основы. Я буду помнить о первом абзаце всякий раз, когда я программирую. Большое спасибо за вашу помощь ^^
Ответ №2:
Вы можете создать массив из строки, разделив его на символ новой строки (n), затем отсортировав его и преобразовав обратно в строку, соединив элементы с тем же символом новой строки:
var str:String = "BobnMohammednAlfrednMosesnTom";
var sortedString = str.split("n").sort().join("n"));