テーブルの検証アルゴリズムを実装しようとしていますが、配列やハッシュを扱うためにRubyが提供する複数の選択肢と混同しています。一例として、この表を考えてみましょう:テーブル内のセルの組み合わせを確認する
| A | B | C |
-------------
| 1 | 2 | 3 |
| 1 | 2 | 4 |
| 5 | 6 | 7 |
| 1 | 1 | 3 |
私の方法は、特定の細胞の組み合わせの出現回数をカウントする必要があります。例えば、この組み合わせは、最初の行と最後の両方に存在するように
match_line([A => 1, C => 3])
結果は、2
なければなりません。
[A => 0, B => 1, C=> 2]
そして、私もそうのような上記のすべてのテーブルの行を保持する配列のリストがあります:
[[1, 2, 3], [1, 2, 4], [5, 6, 7], [1, 1, 3]]
を私はこれまでのところのように、列のインデックスを保持hash
変数を作成することです何をしたか その論理は、上記のmatch_line
メソッドのように、ユーザーが列Aに1
という値を持ち、列Cに3
という値がある行と一致させたいという特定の方法です。インデックスハッシュに基づいて、A列インデックスは0
であり、Cインデックスは2
です。配列リスト内の各配列(行)に対して、インデックス0がに等しく、インデックス2がユーザが要求したように3
に等しい場合、カウンタに+1を追加し、終了するまで他の配列行を継続します。
私はそれをコードに形成しようとしましたが、非常に効率的ではないと思われる方法で終了しました。あなたのコード例を見ることに興味があります。おそらくRubyは内側のEnumerableメソッドを持っていますよりエレガントにするために
からハッシュを作成します。データ構造が複雑すぎると言われたように、私のエラーはだと思います。上記の例では、私の列は定数である必要がありますか?テーブルの列が動的に選択されている場合、これは機能しませんか?私は列の名前を保持し、何とかそれに対してシーケンスを動的に構築する別の配列を持つ必要がありますね?ありがとう! – Okiba
メソッドは小さく、責任の分離の一種を尊重する必要があります:マッチングを管理するメソッドを定義し、入力からハッシュを構築するメソッドを定義します。これにより、保守や再利用が容易になります。 – floum
すでに完了しています。 '@ data_hashes'にキー値を動的に割り当てる方法がわかりません。これはおそらく何か? 'column_names = ['d'、 'e'、 'f'] @data_hashes = data。マップド|シーケンス| column_names.each_with_index do | value、index | {value => sequence [index]} end' – Okiba