2017-10-02 10 views
-2

first_and_lastという名前のメソッドを作成する必要があります。 1つの引数Arrayを使用し、引数の最初と最後のオブジェクトだけを持つ新しいArrayを返す必要があります。Rubyの配列の最初と最後の項目だけを返します

これまで私がこれまで持っていたことはありますが、このメソッドは最初の引数を無視して新しい配列を作成するようです。

def first_and_last(a) 
    arr = Array.new 
    arr = ["a", "b", "c"] 
end 
+3

ヒント: 'A'の最初と最後の要素にアクセスするにはどうすればよいですか?あなたが '[x、y]'を実行した場合、何が起きますか? 'x'と' y'はそれらの2つのことを表していますか? Rubyでは、配列の最初の要素と最後の要素の両方にアクセスする方法は、Arrayのドキュメントをスキミングしても夢中になります。 – tadman

+0

あなたの現在のコードは何ですか: 1) 'first_and_last'というメソッドがあり、これは' a'というパラメータをとりますが、決して使用しません。 2)新しい配列を作成し、変数 'arr'に格納します。 3) 'arr'を' ['a'、 'b'、 'c'] 'に設定して返します。 あなたはそれをあなたがしたいことにどのように変更できますか? – Dbz

+2

'[a.first、a.last]'。 –

答えて

2

あなたはこのような配列内の最初と最後の要素を取得するためにvalues_at()メソッドを使用することができます。

def first_and_last(input_array) 
    input_array.values_at(0,-1) 
end 

あなたが探している、それはして配列に動作しない場合がありますどのような行動に応じて、 1または0要素。 You can read more about the method here

+0

'input_array'が' [3] 'や' [] 'と等しければ、メソッドは' [3,3] 'と' [nil、nil] 'を返します。私はあなたの最後から2番目の文を削除することをお勧めします。また、「values_at()メソッドを使用して[Array#values_at](http://ruby-doc.org/core-2.4.0/Array.html#method- i-values_at)を "に設定して、最後の文の必要性を取り除きます。 –

+0

'first_and_last'というメソッドを使っている誰かが、同じ要素をその結果に2回戻すことを期待していない可能性があると思います。あなたの入力の例[3、3]を使うと、 '[3、nil]'や '[3]'のようなものが期待できるでしょう。また、何かを返すのではなく、例外を発生させるメソッドが必要な場合もあります。また、初心者向けに別の層の混乱を招く可能性があるため、インスタンスメソッドにハッシュ表記法を使用することについては垣間見ることができます。 – Pend

+0

'[1、2、nil]'の最初と最後の要素が必要だとしますか?これは '[1、nil]'となるので、それを受信者が1要素配列であると解釈することはできません。私は、受信機がゼロ、1つ以上の要素を持っているかどうかを単に確認する必要があると思います。私はあなたが "...インスタンスメソッドのためにハッシュ表記法を使用することについて..."という意味を理解していません。 –

0

配列の最初の要素には.first、配列の最後の要素には.lastを使用することもできます。

def first_and_last(arr) 
    [arr.first, arr.last] 
end 

p first_and_last([1,2,3,4,5,6]) 

それとも....

def first_and_last(arr) 
    [arr[0], arr[-1]] 
end 

p first_and_last([1,2,3,4,5,6]) 
+1

これも機能します。メソッド本体を1行に短縮することができます: '[arr.first、arr.last]' – Pend

+1

これは動作しますが、ひどいコードです。 – sawa

+0

コードが多すぎます。これは1行でなければならず、いくつかの方法があります。 '[arr。最初の、arr.last] 'おそらく最も明瞭です。 – moveson

関連する問題