0

配列の特定の要素を探すメソッドしか見つかりません。

objects.each 中 |a| ループ、私は最後の要素にいるときを知りたいので、次のようなループを持つことができます:

objects.each |a|
   if objects.hasNext()
       puts a.name + ","
   else
       puts a.name

Iterator の hasNext() は、現在評価されている要素の後に、Array の iterator に別の要素があるかどうかを判断します。

これらの値を配列に変換するのではなく、出力しようとしていることを強調したいと思います。.join は、私がここで探しているものではありません。

4

5 に答える 5

2

Ruby ライブラリでは、外部反復子を実装する Java とは対照的に、反復子は内部反復子として実装されます。この 2 つの主な違いは、前者はクライアントが繰り返しを制御できないように設計されているのに対し、後者はこの責任をクライアントに任せていることです。

メソッド like の目的はhasNext反復を直接制御することなので、Ruby にはそのようなものは存在しません。peeklikeおよびnextdefined byのメソッドEnumeratorは、反復を直接制御するためのものではなく、カスタムの内部反復子を実装するためのものだと思います。

とはいえ、あなたの問題はこのコードで簡単に解決できます:

puts objects.map(&:name).join(', ')

Enumeratorただし、オブジェクトを使用して独自の内部イテレータを作成すると便利な場合があります。

module Enumerable
  def puts_each_with_separator(separator)
    enum = each
    loop do
      print yield(enum.next)
      enum.peek rescue break
      print separator
    end
    puts
  end
end

objects.puts_each_with_separator(', ', &:name)
于 2013-04-14T00:12:51.787 に答える
1

これらの値を配列に変換するのではなく、出力しようとしていることを強調したいと思います。.join は、私がここで探しているものではありません。

実際、 .join はまさにあなたが探しているものだと思います。.join の結果は配列ではなく文字列なので、

puts objects.join(",") 

あなたが望むと言うことをします。

于 2013-04-13T18:43:29.380 に答える