ホームページ  >  記事  >  Javaで2D配列の行をシャッフルするにはどうすればよいですか?

Javaで2D配列の行をシャッフルするにはどうすればよいですか?

PHPz
PHPz転載
2024-02-09 16:15:20866ブラウズ

Java で 2 次元配列の行をスクランブルするにはどうすればよいですか?これは、多くの開発者がよく遭遇する問題です。 2 次元配列の行をシャッフルするには、Collections クラスの shuffle() メソッドを使用します。このメソッドは、コレクション内の要素の順序をランダムにシャッフルできます。まず、2 次元配列を List 形式に変換し、次に shuffle() メソッドを使用してリストをランダムに並べ替える必要があります。最後に、リストを 2 次元配列に変換して戻すと、行のシャッフルが完了します。この方法はシンプルで実装が簡単で、2 次元配列の行を効果的にスクランブルでき、開発者にデータを処理するためのより柔軟な方法を提供します。

質問内容

csvファイルを読み込んでデータの前処理を行うコードを書いたのですが、順序は変更されていませんが、列ではなく2次元配列の行をシャッフルするはずです。 。

私が抱えている問題は、2次元配列の行と列がスクランブルされることですが、それを修正する方法がわかりません。

リーリー

ご覧のとおり、他にもメソッドはありますが、正常に動作するのはこの shuffle2darray() メソッドだけです。

データをランダムに 10 部分に分割し、10 部分の相互検証を実行できるようにします

コードに print ステートメントを入れてみたり、シャッフルの前後で 2 次元配列をチェックしてみたり、CSV ファイルをチェックして行が正しい順序であることを確認してみたりしました。

これはフィルタリング前の小さな例です:

cpi_9606.ensp00000000233 cpi_9606.ensp00000000412 cpi_9606.ensp00000000442 cpi_9606.ensp00000001008 cpi_9606.ensp00000001146 cpi_9606.ensp00000002165 cpi_9606.ensp00000002829 cpi_9606.ensp00000003084 cpi_9606.ensp00000003100
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 180

列のフィルタリングとシャッフル後:

cpi_9606.ENSP00000000442 cpi_9606.ENSP00000001008 cpi_9606.ENSP00000003084 cpi_9606.ENSP00000003100 cpi_9606.ENSP00000005178 cpi_9606.ENSP00000011292 cpi_9606.ENSP00000011653 cpi_9606.ENSP00000012443 cpi_9606.ENSP00000013034 cpi_9606.ENSP00000014930
0 900 0 0 0 900 0 0 0
900 0 0 0 0 0 928 900 338
322 236 0 0 0 0 0 0 0

解決策

コード スニペットには、並べ替える配列という重要な要素が含まれていません。

ということで、暗闇でのワイルドなショットは次のようになると思います:

リーリー

シャッフルするにはライナーです。所有するコードはすべて破棄できます:

リーリー

では、なぜこれが機能するのでしょうか?

2 次元配列などというものは存在しないからです。 Javaにはそれらがまったくありません。

あなたが持っている int[][] allfeatures は 2D 配列ではありません。これは、コンポーネントが int 配列型である 1 次元配列です。したがって、 arrays.aslist(allfeatures) は、(プリミティブではなく) オブジェクトの配列があるため、優れています。各オブジェクトは int の配列です。式のタイプは list<int[]> です。

arrays.aslist 基礎となる配列に基づいたリストを返します。したがって、.set() は機能しますが、.add() は機能しません (配列は要素を変更できますが、拡大または縮小できないため)。 collections.shuffle は任意のリストをシャッフルでき、これを行うには .set.get のみを使用します。 arrays.aslist がサポートされています。とても良い。

これらすべての結果は、これにより allfeatures 自体が再スケールされることになります。

allfeatures を変更しないでおきたい場合は、まずクローンを作成してください:

リーリー

以上がJavaで2D配列の行をシャッフルするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。