1

次の配列のハッシュを :type でソートするにはどうすればよいですか? それらを循環的に数値的に並べ替えたいと思います。つまり、型を 0,1,0,1,0,1 にするということです。

現在の配列:

values = [{value: "First", type: 0},{value: "Second", type: 0},{value: "1111", type: 1},{value: "2222", type: 1}]

どのように見える必要があるか:

values = [{value: "First", type: 0},{value: "1111", type: 1},{value: "Second", type: 0},{value: "2222", type: 1}]

次のように数値で並べ替えることができます。

values.sort_by! { |x| x[:type] }

次のように、タイプが 1 のすべてのアイテムを配列の先頭に移動します。

values.sort_by! { |x| x[:type] == 1 ? 1 : 0}

しかし、必要なほど複雑に配列を操作することはできません。正直なところ、何時間もグーグルでした。物事を数字やアルファベット順に並べる方法や、太陽の下ですべてを並べ替える方法は知っていますが、そこに入って自分が何をしたいのかを正確に言うことはできません.

ブロックが使用された回数を追跡するために変数を反復処理できれば、if ステートメントを使用できるので、反復子 == 2 (0 と 1 の 1 つのセットを注文したことを意味する) の場合、次のペアを注文できますが、文字通り何も見つかりません。sort_by メソッドはこれに適した方法ですか?

これもダイナミックにして欲しい。配列が次のようになっている場合:

values = [{value: "First", type: 0},{value: "Second", type: 0},{value: "1111", type: 1},{value: "2222", type: 1},{value: "Un", type: 2},{value: "Deux", type: 2}]

次に、次のようになります。

values = [{value: "First", type: 0},{value: "1111", type: 1},{value: "Un", type: 2},{value: "Second", type: 0},{value: "2222", type: 1},{value: "Deux", type: 2}]

これを解決できないことに失望しましたが、カスタムメソッドで配列をソートすることについて十分に知りません。昇順と降順の ruby​​ のデフォルトのみを使用します。

「タイプ」の数は常に一定です。:types の順序 (順序付け前) は、常に次のようになります。

0,0,0,1,1,1

また

0,0,0,1,1,1,2,2,2

0、1、1、2 などはありません。

より簡単な例:

[0,0,1,1,2,2] は [0,1,2,0,1,2] としてソートする必要があります

並べ替え方法は動的である必要があるため、これも実行できます。

[0,0,1,1,2,2,3,3] は [0,1,2,3,0,1,2,3] としてソートする必要があります

4

3 に答える 3