<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Latest posts for the topic "Проблема с сортировкой таблицы"]]></title>
		<link>http://www.lua.ru/forum/posts/list/1.page</link>
		<description><![CDATA[Latest messages posted in the topic "Проблема с сортировкой таблицы"]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>Проблема с сортировкой таблицы</title>
				<description><![CDATA[ Никак не могу понять почему таблица не сортируется как надо.<br /> Делаю так:[code]tab = {{1,7,x,x},{1,9,x,x},{1,5,x,x},{2,9,x,x},{2,3,x,x},{2,7,x,x}}<br /> table.sort(tab, function(a, b) return (a[1] &lt;= b[1]) and (a[2] &lt;= b[2]) end)<br /> -- проверяю<br /> for _, v in ipairs(tab) do print(v[1], v[2]) end[/code]Получается совсем не то, что надо получить:[code]<br /> 1	5<br /> 1	7<br /> 1	9<br /> 2	3<br /> 2	7<br /> 2	9[/code]]]></description>
				<guid isPermaLink="true">http://www.lua.ru/forum/posts/preList/149/1179.page</guid>
				<link>http://www.lua.ru/forum/posts/preList/149/1179.page</link>
				<pubDate><![CDATA[Tue, 7 Oct 2008 13:48:41]]> GMT</pubDate>
				<author><![CDATA[ mozers™]]></author>
			</item>
			<item>
				<title>Re:Проблема с сортировкой таблицы</title>
				<description><![CDATA[ здесь нужен или составной ключ, например, [code]a[1]*1000+a[2][/code] или два прохода сортировки]]></description>
				<guid isPermaLink="true">http://www.lua.ru/forum/posts/preList/149/1180.page</guid>
				<link>http://www.lua.ru/forum/posts/preList/149/1180.page</link>
				<pubDate><![CDATA[Tue, 7 Oct 2008 14:38:46]]> GMT</pubDate>
				<author><![CDATA[ XNut]]></author>
			</item>
			<item>
				<title>Re:Проблема с сортировкой таблицы</title>
				<description><![CDATA[ Составной ключ мне не подходит (слишком непредсказуема разрядность чисел - тут сильно упрощенный пример).<br /> В два прохода тоже почему то фигню выдает <img src="http://www.lua.ru/forum//images/smilies/9d71f0541cff0a302a0309c5079e8dee.gif" />]]></description>
				<guid isPermaLink="true">http://www.lua.ru/forum/posts/preList/149/1181.page</guid>
				<link>http://www.lua.ru/forum/posts/preList/149/1181.page</link>
				<pubDate><![CDATA[Tue, 7 Oct 2008 14:52:57]]> GMT</pubDate>
				<author><![CDATA[ mozers™]]></author>
			</item>
			<item>
				<title>Re:Проблема с сортировкой таблицы</title>
				<description><![CDATA[ Вы забыли написать, а что же вы [b]хотите[/b] получить.]]></description>
				<guid isPermaLink="true">http://www.lua.ru/forum/posts/preList/149/1182.page</guid>
				<link>http://www.lua.ru/forum/posts/preList/149/1182.page</link>
				<pubDate><![CDATA[Tue, 7 Oct 2008 15:14:43]]> GMT</pubDate>
				<author><![CDATA[ smz]]></author>
			</item>
			<item>
				<title>Re:Проблема с сортировкой таблицы</title>
				<description><![CDATA[ [code]<br /> function comp(a, b)<br />    if a[1] &lt; b[1] then<br />       return true;<br />    elseif a[1] &gt; b[1] then<br />       return false;<br />    elseif a[2] &lt; b[2] then<br />       return true;<br />    else <br />       return false;<br />    end<br /> end<br /> [/code]<br /> ]]></description>
				<guid isPermaLink="true">http://www.lua.ru/forum/posts/preList/149/1183.page</guid>
				<link>http://www.lua.ru/forum/posts/preList/149/1183.page</link>
				<pubDate><![CDATA[Tue, 7 Oct 2008 15:22:56]]> GMT</pubDate>
				<author><![CDATA[ Strijar]]></author>
			</item>
			<item>
				<title>Re:Проблема с сортировкой таблицы</title>
				<description><![CDATA[ [quote=smz]Вы забыли написать, а что же вы [b]хотите[/b] получить.[/quote]<br /> <br /> Табличка после кода - желаемое. Я тоже не сразу понял <img src="http://www.lua.ru/forum//images/smilies/8a80c6485cd926be453217d59a84a888.gif" />]]></description>
				<guid isPermaLink="true">http://www.lua.ru/forum/posts/preList/149/1184.page</guid>
				<link>http://www.lua.ru/forum/posts/preList/149/1184.page</link>
				<pubDate><![CDATA[Tue, 7 Oct 2008 15:26:42]]> GMT</pubDate>
				<author><![CDATA[ Strijar]]></author>
			</item>
			<item>
				<title>Re:Проблема с сортировкой таблицы</title>
				<description><![CDATA[ А, до меня дошло. (Исходное сообщение было несколько двусмысленно, однако). Можно так:<br /> [code]a[1]&lt;b[1] or a[1]==b[1] and a[2]&lt;b[2][/code]]]></description>
				<guid isPermaLink="true">http://www.lua.ru/forum/posts/preList/149/1185.page</guid>
				<link>http://www.lua.ru/forum/posts/preList/149/1185.page</link>
				<pubDate><![CDATA[Tue, 7 Oct 2008 15:35:30]]> GMT</pubDate>
				<author><![CDATA[ smz]]></author>
			</item>
			<item>
				<title>Re:Проблема с сортировкой таблицы</title>
				<description><![CDATA[ О, точно - красота!]]></description>
				<guid isPermaLink="true">http://www.lua.ru/forum/posts/preList/149/1186.page</guid>
				<link>http://www.lua.ru/forum/posts/preList/149/1186.page</link>
				<pubDate><![CDATA[Tue, 7 Oct 2008 15:48:26]]> GMT</pubDate>
				<author><![CDATA[ Strijar]]></author>
			</item>
			<item>
				<title>Проблема с сортировкой таблицы</title>
				<description><![CDATA[ 2[b]smz[/b]<br /> Я написал как раз не то что [u]получаю[/u], а то что [u]хочу получить[/u] <img src="http://www.lua.ru/forum//images/smilies/3b63d1616c5dfcf29f8a7a031aaa7cad.gif" /><br /> <br /> 2[b]Strijar[/b]<br /> СПАСИБО! То что надо. Работает отлично!]]></description>
				<guid isPermaLink="true">http://www.lua.ru/forum/posts/preList/149/1187.page</guid>
				<link>http://www.lua.ru/forum/posts/preList/149/1187.page</link>
				<pubDate><![CDATA[Tue, 7 Oct 2008 15:56:57]]> GMT</pubDate>
				<author><![CDATA[ mozers™]]></author>
			</item>
			<item>
				<title>Проблема с сортировкой таблицы</title>
				<description><![CDATA[ 2[b]smz[/b]<br /> Класс!<br /> [s]Ребята, я не успеваю за стремительным полетом вашей мысли <img src="http://www.lua.ru/forum//images/smilies/3b63d1616c5dfcf29f8a7a031aaa7cad.gif" />[/s]]]></description>
				<guid isPermaLink="true">http://www.lua.ru/forum/posts/preList/149/1188.page</guid>
				<link>http://www.lua.ru/forum/posts/preList/149/1188.page</link>
				<pubDate><![CDATA[Tue, 7 Oct 2008 16:00:25]]> GMT</pubDate>
				<author><![CDATA[ mozers™]]></author>
			</item>
			<item>
				<title>Проблема с сортировкой таблицы</title>
				<description><![CDATA[ Всетаки никак не просеку логику функции сравнения :-/<br /> Вот так, как я полагал, вообще ничего не должно сортироваться:[code]<br /> tab = {1,7,9,5,2,9,2,3}<br /> table.sort(tab, function(a, b) return false end)[/code]<br /> Однако - элементы таблицы все равно сортируются, правда в каком то диком порядке :-/<br /> Если false заменить на true то вообще ошибка возникает.<br /> 10 раз справку по sort перечитал - бесполезно :-/]]></description>
				<guid isPermaLink="true">http://www.lua.ru/forum/posts/preList/149/1189.page</guid>
				<link>http://www.lua.ru/forum/posts/preList/149/1189.page</link>
				<pubDate><![CDATA[Tue, 7 Oct 2008 17:02:25]]> GMT</pubDate>
				<author><![CDATA[ mozers™]]></author>
			</item>
			<item>
				<title>Проблема с сортировкой таблицы</title>
				<description><![CDATA[ [quote=mozers™]Всетаки никак не просеку логику функции сравнения :-/[/quote]<br /> <br /> Там QuickSort]]></description>
				<guid isPermaLink="true">http://www.lua.ru/forum/posts/preList/149/1190.page</guid>
				<link>http://www.lua.ru/forum/posts/preList/149/1190.page</link>
				<pubDate><![CDATA[Tue, 7 Oct 2008 17:10:30]]> GMT</pubDate>
				<author><![CDATA[ Strijar]]></author>
			</item>
			<item>
				<title>Проблема с сортировкой таблицы</title>
				<description><![CDATA[ [quote=mozers™]Всетаки никак не просеку логику функции сравнения :-/<br /> Вот так, как я полагал, вообще ничего не должно сортироваться:[code]<br /> tab = {1,7,9,5,2,9,2,3}<br /> table.sort(tab, function(a, b) return false end)[/code]<br /> Однако - элементы таблицы все равно сортируются, правда в каком то диком порядке :-/<br /> Если false заменить на true то вообще ошибка возникает.<br /> 10 раз справку по sort перечитал - бесполезно :-/[/quote]<br /> Отвлекаясь от конкретного алгоритма сортировки, принцип такой - функция сравнения должна отвечать на вопрос: "1-й элемент должен быть впереди 2-го?". Ф-ция сравнения, всегда возвращающая [b]false[/b] - корректна (например, все элементы таблицы по её логике равны - демократия), а вот ф-ция, всегда возвращающая [b]true[/b] - некорректна, так как она один раз требует поставить A впереди Б, а второй раз - наоборот.]]></description>
				<guid isPermaLink="true">http://www.lua.ru/forum/posts/preList/149/1191.page</guid>
				<link>http://www.lua.ru/forum/posts/preList/149/1191.page</link>
				<pubDate><![CDATA[Tue, 7 Oct 2008 17:47:43]]> GMT</pubDate>
				<author><![CDATA[ smz]]></author>
			</item>
			<item>
				<title>Re:Проблема с сортировкой таблицы</title>
				<description><![CDATA[ СПАСИБО. Все вроде понял.<br /> Если понял правильно, то работу функции sort можно описать таким кодом:[code]local tab = {1,7,9,5,2,9,2,3}<br /> <br /> local function SortTable(tbl)<br />     -- функция сравнения<br />     function comp(a, b)<br />         if a &lt; b then return false end<br />         if a &gt; b then return true end<br />     end<br /> <br />     repeat<br />         local _done = true<br />         for i = 1, #tbl-1 do<br />             if comp(tbl[i],tbl[i+1]) then<br />                 -- ecли функция сравнения возвращает true, то меняем элементы местами<br />                 local _tmp = tbl[i]<br />                 tbl[i] = tbl[i+1]<br />                 tbl[i+1] = _tmp<br />                 _done = false -- и запускаем цикл по-новой<br />                 break<br />             end<br />         end<br />     until _done<br /> end<br /> <br /> SortTable(tab)<br /> <br /> -- проверяем<br /> for _, v in ipairs(tab) do print(v) end[/code]]]></description>
				<guid isPermaLink="true">http://www.lua.ru/forum/posts/preList/149/1192.page</guid>
				<link>http://www.lua.ru/forum/posts/preList/149/1192.page</link>
				<pubDate><![CDATA[Tue, 7 Oct 2008 20:57:18]]> GMT</pubDate>
				<author><![CDATA[ mozers™]]></author>
			</item>
			<item>
				<title>Re:Проблема с сортировкой таблицы</title>
				<description><![CDATA[ Вы применили так наз. пузырьковую сортировку. Обычно она реализуется двойным вложенным циклом, ваш вариант в наихудшем случае будет раза в 2 медленнее (хотя в наилучшем будет гораздо быстрее).<br /> <br /> Функция [b]comp[/b] должна быть вынесена из ф-ции [b]SortTable[/b] и передаваться как параметр. Кроме того, её можно упростить:<br /> [code]local function comp(a, b) return a &gt; b end<br /> [/code]Менять элементы местами в Lua можно без временных переменных:<br /> [code]tbl[i], tbl[i+1] = tbl[i+1], tbl[i]<br /> [/code]]]></description>
				<guid isPermaLink="true">http://www.lua.ru/forum/posts/preList/149/1193.page</guid>
				<link>http://www.lua.ru/forum/posts/preList/149/1193.page</link>
				<pubDate><![CDATA[Tue, 7 Oct 2008 22:09:24]]> GMT</pubDate>
				<author><![CDATA[ smz]]></author>
			</item>
	</channel>
</rss>
