2016年3月21日月曜日

160321

Ruby


いろいろな並び替え

http://ja.stackoverflow.com/questions/23279/%E9%85%8D%E5%88%97%E3%82%92%E6%9C%80%E5%A4%A7%E5%80%A4%E3%81%AE%E5%B0%8F%E3%81%95%E3%81%84%E9%A0%86-%E5%A4%A7%E3%81%8D%E3%81%84%E9%A0%86%E3%82%84%E6%9C%80%E5%B0%8F%E5%80%A4%E3%81%AE%E5%B0%8F%E3%81%95%E3%81%84%E9%A0%86-%E5%A4%A7%E3%81%8D%E3%81%84%E9%A0%86%E3%81%AB%E4%B8%A6%E3%81%B9%E5%A4%89%E3%81%88%E3%81%9F%E3%81%A8%E3%81%8D%E3%81%AE%E7%B5%90%E6%9E%9C%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6
で教えてもらったので、実際に試してみた。

# -*- coding: cp932 -*-

=begin
以下のように並びる。

最大値が小さい順に並べる。
ただし、最大値が同じ場合は、次に大きいもの同士を比べ、小さい順に並べ
さらに同じ場合は、その次に大きいもの同士を比べ、小さい順に並べる。

最大値が大きい順に並べる。
ただし、最大値が同じ場合は、次に大きいもの同士を比べ、大きい順に並べ
さらに同じ場合は、その次に大きいもの同士を比べ、大きい順に並べる。

最小値が小さい順に並べる。
ただし、最小値が同じ場合は、次に小さいもの同士を比べ、小さい順に並べ
さらに同じ場合は、その次に小さいもの同士を比べ、小さい順に並べる。

最小値が大きい順に並べる。
ただし、最小値が同じ場合は、次に小さいもの同士を比べ、大きい順に並べ
さらに同じ場合は、その次に小さいもの同士を比べ、大きい順に並べる。
=end

ary1 = [[2, 5, 9], [5, 5, 6], [2, 5, 8], [2, 5, 7], [4, 5, 5], [2, 8, 8]]
ary2 = [[5, 9, 2], [6, 5, 5], [2, 8, 5], [7, 5, 2], [5, 5, 4], [8, 2, 8]]

p '最大値が小さい順'
p ary1.sort_by{|x| x.sort{|a, b| b <=> a}}
p ary2.sort_by{|x| x.sort{|a, b| b <=> a}}
p '最大値が大きい順'
p ary1.sort_by{|x| x.sort{|a, b| b <=> a}}.reverse
p ary2.sort_by{|x| x.sort{|a, b| b <=> a}}.reverse
p '最小値が小さい順'
p ary1.sort_by(&:sort)
p ary2.sort_by(&:sort)
p '最小値が大きい順'
p ary1.sort_by(&:sort).reverse
p ary2.sort_by(&:sort).reverse

出力結果
"最大値が小さい順"
[[4, 5, 5], [5, 5, 6], [2, 5, 7], [2, 5, 8], [2, 8, 8], [2, 5, 9]]
[[5, 5, 4], [6, 5, 5], [7, 5, 2], [2, 8, 5], [8, 2, 8], [5, 9, 2]]
"最大値が大きい順"
[[2, 5, 9], [2, 8, 8], [2, 5, 8], [2, 5, 7], [5, 5, 6], [4, 5, 5]]
[[5, 9, 2], [8, 2, 8], [2, 8, 5], [7, 5, 2], [6, 5, 5], [5, 5, 4]]
"最小値が小さい順"
[[2, 5, 7], [2, 5, 8], [2, 5, 9], [2, 8, 8], [4, 5, 5], [5, 5, 6]]
[[7, 5, 2], [2, 8, 5], [5, 9, 2], [8, 2, 8], [5, 5, 4], [6, 5, 5]]
"最小値が大きい順"
[[5, 5, 6], [4, 5, 5], [2, 8, 8], [2, 5, 9], [2, 5, 8], [2, 5, 7]]
[[6, 5, 5], [5, 5, 4], [8, 2, 8], [5, 9, 2], [2, 8, 5], [7, 5, 2]]

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。