ruby の

[[”2004:09:21:00:00:00”, ”3”, ..],
[”2004:09:21:00:00:00”, ”4”,...],
[”2004:09:22:00:00:00”, ”2”,...], ...
]
のような配列があります。この配列をまず0番目の要素 (”2004:09:22:00:00:00” のような形式の日付)で昇順にソートし、かつ、同日付でソートされた結果を崩さずに、2番目のソートキーとして1番目の要素 (”3”や ”4”のような文字列)で降順にソートするにはどのような式を用いれば良いでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:dekodeko No.1

回答回数6ベストアンサー獲得回数0

ポイント30pt

http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Array

Array - Rubyリファレンスマニュアル

しばらくRubyから遠ざかっていたのと、いまRubyを実行できる環境にいないのであんまり自信ないんで、ポイントはいいです。

こんなのはどうでしょう。

a.sort{|a,b|

v = a[0] <=> b[0]

if(v == 0)

v = a[1] <=> b[1]

end

return v

}

id:minakaji

残念ながら日付のソートが崩れてしまいます。

2004/09/27 17:52:10
id:zarchis No.2

回答回数10ベストアンサー獲得回数1

ポイント35pt

urlはダミーです。

ちょっと考えましたがRuby知らないんで、適当。

Array.sortという関数使えばなんとでもなりそうなので、記述しま。

そういう配列が入ったオブジェクトをoとします

o.sort{ |x,y|

gap = x[0] - y[0] #1つめの要素の比較

if gap == 0

gap = y[1] - x[2] #2つめの要素の比較

end

gap

}

比較部分テキトーですが、こんな感じのノリのコードになるかと。

id:zarchis No.3

回答回数10ベストアンサー獲得回数1

ポイント5pt

urlはダミです(ケンシロウ進数)

追記。

要素の比較を文字列として比較しているので、

ちょっとユルい感じもします。ハィ(´・ω・)

最初の要素はDateオブジェクトに変換してから

比較のほうがいいかも?

Dateクラスあるか知らないし、変換タイヘンかもだけど。

id:Radomu No.4

回答回数39ベストアンサー獲得回数0

http://www14.big.or.jp/~hosoya/who/o/ohara-reiko.htm

ウルトラシリーズ俳優人名録 大原麗子

はい!?

id:minakaji

無関係。

2004/09/27 17:53:45
  • id:memento
    rubyのsortメソッドの機能を活用

    与えられた配列が array であるとして
    array.sort!{|x, y|
    [x[0], y[1]] <=> [y[0], x[1]]
    }
    とすればいいと思います。

    どの成分も昇順にするならば、単に Array クラスの sort をブロックなしで呼び出します。
    しかし今のばあいは二番目のソートを降順にしたいので、二番目のソートキーを交換した配列をブロックに与えます。
    こうすれば一番目のソートキーについて昇順に、二番目のソートキーについて降順になります。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません