Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Оптимальный способ сортировки символов внутри строки / 22 сообщений из 22, страница 1 из 1
26.01.2011, 06:14
    #37078675
Аленочка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимальный способ сортировки символов внутри строки
Хай пипл..!

Кто может предложить интересные варианты решения следующей задачки:
Предположим есть строка "2563,12,8568,25"
Нужно отсортировать в ней символы по возрастанию и результат вернуть как строку вида:
"12,25,2563,8568"

В принципе уже решила средствами SQL, но какой-то вариант получился "с выходом из-за угла.."
Было бы интересно узнать и другие способы решения, возможно более оптимальные на COS или JavaScript



-----------------------------------------------
А мы тут плюшками балуемся...

Аленочка тм
...
Рейтинг: 0 / 0
26.01.2011, 07:49
    #37078701
kolesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимальный способ сортировки символов внутри строки
Аленочка,
Код: plaintext
1.
2.
3.
4.
5.
6.
	var a = ' 2563 , 12 , 8568 , 25 '
	var arr=[];
	arr = a.split(',')
	alert(arr[ 0 ]+"+"+arr[ 1 ]+"+"+arr[ 2 ]+"+"+arr[ 3 ]);
	arr.sort();
	alert(arr[ 0 ]+"+"+arr[ 1 ]+"+"+arr[ 2 ]+"+"+arr[ 3 ]);

arrayobj.sort(sortfunction)
The sortfunction argument is the name of the function used to determine the order of the elements. If omitted, the elements are sorted in ascending, ASCII character order.
...
Рейтинг: 0 / 0
26.01.2011, 08:00
    #37078709
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимальный способ сортировки символов внутри строки
kolesovarr.sort();

Читер! :-)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
s str="128,4762,12341,2" 
k temp 
f i= 1 : 1 :$l(str,",") 
  {s temp($p(str,",",i),i)=""
  }
s ref="temp" 
f {s ref=$q(@ref)  q:ref=""  
   w !,$qs(ref, 1 )
  }
...
Рейтинг: 0 / 0
26.01.2011, 08:26
    #37078732
Аленочка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимальный способ сортировки символов внутри строки
kolesov
Блок А.Н.




А вот мой способ =))) Тоже работает и с производительностью вроде нормуль
Хотя еще сравню с вашими вариантами

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
ClassMethod SortIdsInString(list As %String) As %String [ ZenMethod ]
{
....

set sql = "SELECT LIST(ID) AS SLIST FROM my.Class"
		 	 _" WHERE ID IN ("_list_") ORDER BY ID ASC"
set result=##class(%ResultSet.SQL).%Prepare(.sql,.err)

....
}
...
Рейтинг: 0 / 0
26.01.2011, 08:31
    #37078736
Аленочка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимальный способ сортировки символов внутри строки
забыла написать, в переменной list - список айдишек записей в произвольном порядке,
которые должны быть отсортированы по возрастанию..
...
Рейтинг: 0 / 0
26.01.2011, 09:06
    #37078780
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимальный способ сортировки символов внутри строки
Аленочкав переменной list - список айдишек записей в произвольном порядке
Твой "способ" будет работать только для существующих цифровых ИД класса... А примеры ребят - универсальны.
...
Рейтинг: 0 / 0
26.01.2011, 16:03
    #37079913
Пузырь
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимальный способ сортировки символов внутри строки
Вот самый простой метод пузыря(для цифровых значений). Можно применить "Быстрый метод". Что будет оптимальнее для Cache хз.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Str(str="")
	s:str="" str="2563,12,8568,25"
	w str
	s t= 1 
	while t
	{
		s t= 0 
		f i= 1 : 1 :$l(str,",")
		{
			if (((i+ 1 )'>$l(str,","))&&(($p(str,",",i))>($p(str,",",i+1))))
			{
				s c=$p(str,",",i)
				s $p(str,",",i)=$p(str,",",i+ 1 )
				s $p(str,",",i+ 1 )=c
				s t= 1 
			}
		}
	}
	w !,str
	q
...
Рейтинг: 0 / 0
26.01.2011, 16:16
    #37079962
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимальный способ сортировки символов внутри строки
ПузырьВот самый простой метод пузыря(для цифровых значений).
У каше есть своя сортировка. Её с успехом применил Блок А.Н. ...
...
Рейтинг: 0 / 0
26.01.2011, 22:19
    #37080632
doublefint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимальный способ сортировки символов внутри строки
Дополню пример kolesova
Код: plaintext
1.
        var a = '2563,12,8568,25', arr=a.split(','); arr.sort(); alert(arr.join(","));

и Александра
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 s str="128,4762,12341,2", str=$LFS(str,",") k temp
 s temp="",key= 0 ,id="" while $LISTNEXT(str,key,id) {
    s temp(+id)="" ;если там действительно id 
 }
 s id="" f { s id=$o(temp(id))  Q:id=""   
  s temp=temp_$lb(id)
 }
 w !,$LTS(temp,",")
 
...
Рейтинг: 0 / 0
27.01.2011, 09:56
    #37080979
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимальный способ сортировки символов внутри строки
doublefintДополню пример kolesova
Дело в том что join не во всех браузерах реализован... Т.ч. дополнение ИЕ онли...
...
Рейтинг: 0 / 0
27.01.2011, 10:57
    #37081104
doublefint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимальный способ сортировки символов внутри строки
krvsa, это было давно и неправда. Обновите браузер пользователю :)
...
Рейтинг: 0 / 0
27.01.2011, 11:01
    #37081109
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимальный способ сортировки символов внутри строки
doublefintэто было давно и неправда
Недалее как с месяц назад...
Так же написал клиенту - не работало (в каком именно уже не помню)... Пришлось переделывать на функцию с циклом.

doublefintОбновите браузер пользователю
Мудро!
...
Рейтинг: 0 / 0
27.01.2011, 19:14
    #37082798
CEH
CEH
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимальный способ сортировки символов внутри строки
конечно все зависит от версии, но хотелось бы узнать что быстрее
Код: plaintext
1.
2.
f i=1:1:$l(str,",") s p=$p(str,",",i),$list(listOut,i)=p
или
f i=1:1:$l(str,",") s p=$p(str,",",i),listOut=listOut_$lb(p)
у кого есть новые версии под рукой?
P.S. doublefint, $LISTTOSTRING свою строил для 5; $LISTNEXT очень хорошая штука но отсутствует в старых версиях.
...
Рейтинг: 0 / 0
27.01.2011, 20:31
    #37082880
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимальный способ сортировки символов внутри строки
Думаю, первая команда намного медленнее - по сути это вставка данных в середину строки (не на самом деле не в середину, но не факт, что каше это отлавливает), а вторая - присоединение одной строки к другой.
...
Рейтинг: 0 / 0
27.01.2011, 22:19
    #37083006
doublefint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимальный способ сортировки символов внутри строки
CEH$LISTNEXT очень хорошая штука но отсутствует в старых версиях.

угу, говорят раз в 400 быстрее чем $P
в этой теме делали и тестировали на производительность аналоги функции $REPLACE для старых версий Cache. Там можно найти несколько интересных идей :)
...
Рейтинг: 0 / 0
28.01.2011, 00:01
    #37083105
CEH
CEH
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимальный способ сортировки символов внутри строки
в v5 4000 кусков
$list(listOut,1)=p ~ 0.149027 sec.
listOut=listOut_$lb(p) ~ 0.088136 sec.

это я знаю. но в новых версиях $ListNext использует прямой pointer на следующий елемент.
я надеюсь что это повлияло на скорость $list(,i). конечно же, это только догадки -- кто нибудь проверьте пожалуйста.
...
Рейтинг: 0 / 0
28.01.2011, 10:46
    #37083660
yot
yot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимальный способ сортировки символов внутри строки
а я бы сделал так (просто как вариант)))

ClassMethod ttt()
{
k ^mtemp.ll
S g = $Name(^mtemp.ll)
s EndStr = ""
s str = "2563,12,12,8568,25"
f i = 1:1:$l(str,",") s @g@($p(str,",",i)) = $i(@g@($p(str,",",i)))
s i = "" f {
s i = $o(@g@(i))
Q:i=""
f j = 1:1:@g@(i){
s EndStr = $s(EndStr '= "":EndStr_",",1:"")
s EndStr = EndStr_i
}
}
w EndStr,!
Q $$$OK
}
...
Рейтинг: 0 / 0
28.01.2011, 11:19
    #37083770
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимальный способ сортировки символов внутри строки
yot
Код: plaintext
1.
2.
	k ^mtemp.ll
	S g = $Name(^mtemp.ll)

Очень странное сочетание...

Лучше вот так

Код: plaintext
1.
2.
	S g = $Name(^mtemp.ll)
	k @g
...
Рейтинг: 0 / 0
28.01.2011, 12:50
    #37084049
yot
yot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимальный способ сортировки символов внутри строки
krvsa,

Абсолютно согласен..
...
Рейтинг: 0 / 0
28.01.2011, 20:52
    #37085359
doublefint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимальный способ сортировки символов внутри строки
судя по этому Аленочкавозможно более оптимальные на COS или JavaScript, результат должен выводится на страничку, а значит можно обойтись без склейки строк
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 ClassMethod SortList(list as %String, jsfunc as %String="alert") {
    /*
    ..... ;собственно сортировка любым из cos вариантов
    */
    
    w jsfunc,"(["
    s ll=$ll(list) for li= 1 : 1 :ll {
      w $li(list,li) w:li'=ll ","
    }
    w "]);"
    
 }
...
Рейтинг: 0 / 0
29.01.2011, 07:35
    #37085730
Аленочка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимальный способ сортировки символов внутри строки
doublefintсудя по этому Аленочкавозможно более оптимальные на COS или JavaScript, результат должен выводится на страничку

да вы почти правы, результат - это список отсортированных значений через запятую, который я применяю к tablePane,
чтобы пометить все строки таблицы "флажками", при этом строки в tablePane аналогичным образом отсортированы

Код: plaintext
1.
var str = "12,25,2563,8568"
zenSetProp("table","selectedRows",str)
...
Рейтинг: 0 / 0
29.01.2011, 13:00
    #37085855
doublefint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимальный способ сортировки символов внутри строки
Аленочка, Zen, имхо (см. соседнюю ветку CSP vs CLS), это печально, но с чего-то надо начинать :)
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Оптимальный способ сортировки символов внутри строки / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]