Rubyで2次元配列の作成と部分配列へのアクセス
2023-09-02 22:31:04
質問
2次元の配列を作成し、その中の任意の水平または垂直サブ配列に素早くアクセスする可能性はあるのでしょうか?
以下のようなケースで、水平方向の部分配列にアクセスできると思います。
x = Array.new(10) { Array.new(20) }
x[6][3..8] = 'something'
しかし、私が理解する限り、このようにアクセスすることはできません。
x[3..8][6]
この制限を回避したり、ハックしたりするにはどうしたらよいでしょうか?
どのように解決するのですか?
2次元の
Arrays
を実装する方法には、いくつかの問題があります。
a= [[1,2],[3,4]]
a[0][2]= 5 # works
a[2][0]= 6 # error
Hash
として
Array
私は好んで
Hashes
を使う方がよいでしょう。
Arrays
a= Hash.new
a[[1,2]]= 23
a[[5,6]]= 42
これは、手動で列や行を作成する必要がないという利点があります。ハッシュへの挿入は、ほとんど
O(1)
であるため、この方法には何の欠点もありません。
Hash
が大きくなり過ぎない限り、欠点はありません。
指定されていない要素にデフォルト値を設定することも可能です
a= Hash.new(0)
では、次にサブアレイを取得する方法についてです。
(3..5).to_a.product([2]).collect { |index| a[index] }
[2].product((3..5).to_a).collect { |index| a[index] }
(a..b).to_a
はO(n)で実行されます。からの要素の取り出しは
Hash
から要素を取り出すのはほとんど O(1) であり、したがって collect はほとんど O(n) で実行される。n個の要素をコピーするのは常にO(n)なので、O(n)より速くする方法はありません。
Hashes
は、大きくなりすぎると問題が発生する可能性があります。ですから、私は多次元的な
Array
のような多次元的な実装は、データ量が大きくなることが分かっている場合は、よく考える必要があります。
関連
-
[解決済み] JavaScriptで2次元の配列を作成するにはどうすればよいですか?
-
[解決済み] JavaScriptで2つの配列の差を取得する方法は?
-
[解決済み] Javaで2次元の配列を作成するためのシンタックス
-
[解決済み】JavaScriptで2つの配列を結合し、項目の重複を排除する方法
-
[解決済み】2つの1次元NumPy配列の連結
-
[解決済み】JavaScriptでboolean条件に一致する配列の最初の要素を見つけるには?
-
[解決済み] Ruby: HTTP でファイルを multipart/form-data で投稿するには?
-
[解決済み] 2次元配列のアロケート方法がおかしい?
-
[解決済み] Rubyのオフ・ザ・レール
-
[解決済み] 配列要素のインデックスを O(n) よりも高速に取得する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Rubyで2次元配列の作成と反復処理
-
[解決済み] ...』の違い (ダブルドット) と '...' の違い?(トリプルドット)の違いについて教えてください。
-
[解決済み] Ubuntu 14.04にRuby 2.1.4をインストールする方法
-
[解決済み] Rubyのプライベートモジュールメソッド
-
[解決済み] RubyのREPLを開くコマンドは何ですか?
-
[解決済み] 最大値のハッシュのキーはどのように見つけるのですか?
-
[解決済み] Ruby の文字列から最後の n 文字を抽出する。
-
[解決済み] Rubyで文字列が正規表現にマッチするかどうかをチェックする最も速い方法?
-
[解決済み] インスタンス変数の値をその名前で取得する
-
[解決済み] 配列に要素がない場合、その要素を追加します。