多次元配列を複数のキーで並び替えするには

投稿者: 投稿日:2019/12/07(Sat) 10:30:05 No.2539

 お世話になっております。

 多次元配列を匿名手順で並び替えようとしています。
 この際、複数のキーで並び替えをするには、どうしたらよいのでしょうか。
 とりあえず、サンプルソースです。

----- サンプルソース -----
ーーテスト用の配列を作成。
ーー今回は、4×3の配列を作成しているが、実際に扱おうとしている配列は、もう少し要素が多い。
配列は、{
{「A」, 「テスト1」, 20},
{「B」, 「テスト2」, 21},
{「A」, 「テスト3」, 22},
{「B」, 「テスト4」, 23},
}
配列を『
それを{左,右}とみなす
もし左(1)<右(1)なら
-1を返す。
他でもし左(1)>右(1)なら
1を返す。
そうでなければ
0を返す
もし終わり
』で並び替える
配列を改行で繋げて表示する
--------------------

 このソースコードを実行すると、単純に下記の結果が得られます。

----- 実際の実行結果 -----
{A,テスト3,22}
{A,テスト1,20}
{B,テスト4,23}
{B,テスト2,21}
--------------------

 ただ、今回は2番目の要素でも並び替えを行いたく、下記のような実行結果にしたいと考えています。

----- 想定される実行結果 -----
{A,テスト1,20}
{A,テスト3,22}
{B,テスト2,21}
{B,テスト4,23}
--------------------

 このような順番に並び替えるには、並び替えの手順をどのように書けばいいんでしょうか。
 単純に1番目の要素で並び替えを行ったあと、2番目の要素で並び替えを行うだけではうまくいかず、最初に宣言したときと同じような並び順になってしまいます。
 何かよい方法があれば、アドバイスをいただけると幸いです。

 以上、よろしくお願いいたします。

Re: 多次元配列を複数のキーで並び替えするには

投稿者:アーク <info.nds.laboratry あっとまーくgmail.com> 投稿日:2019/12/07(Sat) 11:41:26 No.2540

こんにちは。アークです。

こういう事でしょうか。
-----------------------------------------------------------------------------------
配列は、{
{「A」, 「テスト1」, 20},
{「B」, 「テスト2」, 21},
{「A」, 「テスト3」, 22},
{「B」, 「テスト4」, 23},
}
配列を『
それを{左,右}とみなす
もし左(1)<右(1)なら
-10を返す。
他でもし左(1)>右(1)なら
10を返す。
そうでなければ
  もし左(3)<右(3)なら
  -1を返す。
  他でもし左(3)>右(3)なら
  1を返す。
  そうでなければ
  0を返す
  もし終わり
もし終わり
』で並び替える
配列を改行で繋げて表示する

Re^2: 多次元配列を複数のキーで並び替えするには

投稿者: 投稿日:2019/12/09(Mon) 18:46:07 No.2542

 こんにちは。

 提示いただいたコードでやりたいことができました。
 ありがとうございました。

 それでは。

▲ページの先頭へ

- WebForum -