2017-11-08 11 views
0

私は色の代わりに5文字の単語を扱う 'mastermind'を再作成しようとしています。1つの配列に同じ要素が別の配列で含まれているかどうか

私は5文字の単語があり、"Alice"と言うことができます。それをanswer_arrayという配列に分割しています。それから私は5文字の単語を入力するようにユーザーに促しているので、それはguess_arrayに分割されます。私はguess_arrayに同じ文字のいずれかが含まれているかどうかを比較しようとしています。もしそうなら、適切なフィードバックを返します。

これは私が達成しようとしているかのラインに沿っている:

guess_array.each { |x| puts guess_array[x] == answer_array[x]} 

それが戻っエラーメッセージpingししかし:

StringTest.rb:18:in `[]': no implicit conversion of String into Integer (TypeError) 
    from StringTest.rb:18:in `block in <main>' 
    from StringTest.rb:18:in `each' 
    from StringTest.rb:18:in `<main>' 

答えて

0

をあなたが唯一の共通の要素を含む配列を取得することができます& (or set intersection) operatorを使用する2つの配列のうち:

> [1, 2, 3] & [2, 3, 4] 
=> [2, 3] 

> [1,2,3] & [4,5,6] 
=> [] 

交差点に空虚をチェックし、ブール値を取得するだけで、実際の共通の価値観を回す:

> ([1,2,3] & [4,5,6]).any? 
=> false 
> ([1,2,3] & [3,5,6]).any? 
=> true 

あなたが現在取得しているエラーについて:どのようなあなたのコードが実際にやっていることはguess_arrayの各要素を反復処理され、各反復時のブロック内の内部変数xは、配列要素そのものです。 xはインデックスではありません。あなたの場合は文字列値です。見てみましょう:

> ['a', 'b', 'c'].each{ |s| puts s } 
a 
b 
c 
=> ["a", "b", "c"] 

だから、明らかにmy_array['a']のようなものは動作しません。

あなたが値とインデックスの両方を反復処理したい場合は、あなたがeach_with_indexを呼び出すことができます:

> ['a','b','c'].each_with_index{ |s, i| puts "value is #{s} and index is #{i}" } 
value is a and index is 0 
value is b and index is 1 
value is c and index is 2 
=> ["a", "b", "c"] 

そして、それはあなたには、いくつかの他のアレイ内のアレイの現在のインデックスに基づいて検索を実行できるようになります。しかし、あなたの特定の問題のために、これはおそらく最良の解決策ではありません - 設定交差点を使用してください。

+0

ありがとう、私は今それを理解しています。ほんとうにありがとう! –

+0

'['a'、 'b'、 'a'、 'c']&['a '、' a '、' d '、' a ']#=> [' a ']'コービンは、あなたが望むものか、戻り値を '['a'、 'a']'あるいは他の何かにしたいのですか? –

関連する問題