1

距離と名前の両方で並べ替えたいです。

(id) ----name----  ----distance----
  1     store           2
  2     shop            3
  3     market          1
  4      bazaar         2

#view
<ul id="xanim">
    <% @objects.each do |obj| %>
        <li><h3><%= obj.distance %></h3><%= obj.distance %>
    <% end %>
</ul>

tinysortの使用(http://tinysort.sjeiti.com)

#javascript
var $Ul = $('ul#xanim');
$Ul.css({position:'relative',height:$Ul.height(),display:'block'});
var iLnH;
var $Li = $('ul#xanim>li');
$Li.each(function(i,el){
    var iY = $(el).position().top;
    $.data(el,'h',iY);
    if (i===1) iLnH = iY;
});
$Li.tsort('h3:eq(0)',{order:'asc'}).each(function(i,el){
    var $El = $(el);
    var iFr = $.data(el,'h');
    var iTo = i*iLnH;
    $El.css({position:'absolute',top:iFr}).animate({top:iTo},500);
});

私は、1つの列だけで分類することができます(たとえば、距離で注文するだけで、市場、店舗、バザール、ショップ)。ただし、両方の距離が等しい場合は、名前でも並べ替えます(たとえば、距離、次に名前:マーケット、バザール、ストア、ショップ)。

最初のコンポーネントが等しい場合、どのように2番目のコンポーネントでソートできますか?

4

2 に答える 2

0

安定したソートアルゴリズム(http://www.algorithmist.com/index.php/Stable_Sort)が必要です。最初にセカンダリコンポーネント(名前)で並べ替え、次にプライマリコンポーネント(距離)で並べ替えます。安定した並べ替えにより、同じ距離の要素が引き続き名前で並べ替えられるようになります。

于 2012-04-16T23:06:08.753 に答える
0

tinysortではまだ複数の並べ替えはできません。ただし、次のようになります:http ://code.google.com/p/tinysort/issues/detail?id=23

いつか:/

于 2012-05-16T20:24:08.833 に答える