4

私はどこでもグーグルで検索しましたが、探しているものの例が見つからないようです。Ruby を学ぼうとしていて、簡単なスクリプトを書いています。ユーザーは、配列に読み込まれる文字を入力するよう求められます。次に、スクリプトは一連の単語を含むファイルを調べて、配列にあるものを含む単語を取り出します。私の問題は、配列の順序である場合にのみ単語を引き出すことです。例えば...

characterArray = Array.new;
puts "Enter characters that the password contains";
characters = gets.chomp;
puts "Searching words containing #{characters}...";

characterArray = characters.scan(/./);
searchCharacters=characterArray[0..characterArray.size].join;

File.open("dictionary.txt").each { |line| 
    if line.include?(searchCharacters)
        puts line;
    end
 }

このコードを使用して「dog」と入力すると、スクリプトは dog doggie を返します。

しかし、同じ順序でなくても単語を返す出力が必要です。のように...犬わんわんロッド

ずさんなコードで申し訳ありません。私が言ったように、まだ学んでいます。ご協力いただきありがとうございます。

PS。私もこれを試しました...

File.open("dictionary.txt").each { |line| 
    if line =~ /[characterArray[0..characterArray.size]]/
        puts line;
    end
}

ただし、これはユーザーが入力した文字のいずれかを含むすべての単語を返します

4

1 に答える 1

3

まず、characterArray自分で作成する必要はありません。関数の結果を新しい変数に割り当てると、それがなくても機能します。

コードcharactersでは、たとえば「asd」になります。characterArray["a", "s", "d"] になります。そしてsearchCharacters再び「asd」になります。この変換は必要ないようです。

characterArray[0..characterArray.size]にちょうど等しいcharacterArrayです。

iterator を使用each_charして、文字列の文字を反復処理できます。私はこれを提案します:

puts "Enter characters that the password contains";
characters = gets.chomp;

File.open("dictionary.txt").each { |line| 
  unless characters.each_char.map  { |c| line.include?(c) }.include? false
    puts line;
  end
}

正常に動作することを確認しました。私のコードでは、配列を作成します。

characters.each_char.map  { |c| line.include?(c) }

この配列の値は次のことを示します。true- 文字が見つかりましたlinefalse- 文字が見つかりません。この配列の長さは、 の文字数と同じですcharactersline値がない場合は良いと見なされfalseます。

于 2012-05-13T18:25:14.537 に答える