2017-08-17 24 views
0

ここにnewとruby: 私は2つのクラス(クラスFriend、クラスLists)と名前と年齢を持つcsv-Fileを持っています。私がcsv-Fileを読むと、ファイル全体から新しいリストオブジェクトを作成し、ファイルのすべての行から新しいfriends-objectを作成したいと考えています。オブジェクト割り当て用の変数を反復する

私の問題: これらのフレンドオブジェクトを変数に割り当てる必要がありますが、変数を反復処理する方法はわかりません。

出力に友人をしようとrequire_relativeここに友人の

class List 

    attr_accessor :list_name 
    attr_accessor :how_many 

    def initialize(list_name) 
    @list_name = list_name 
    @list = [] 
    end 

    def add_friend(a_friend) 
    @list.push(a_friend) 
    end 

    def load_friend(from_file) 
    File.readlines(from_file).each do |line| 
    add_friend(Friend.from_csv(line)) 
    end 
end 
end 


require_relative 'list' 

class Friend 

    attr_accessor :friend_name 
    attr_accessor :age 

    def initialize(friend_name,age) 
     @friend_name = friend_name 
     @age = age 
    end 

    def self.from_csv(string) 
     friend_name, age = string.split(',') 
     Friend.new(friend_name,age) 
    end 

end 

はイム:

#------------------------- 
def value(place) 
    @list[place].to_s 
end 
def print_list 
    puts @liste.to_s 
end 

#------------------------- 
puts liste1.print_list 
puts liste1.wert(1) 

#------------------------- 
#Output 
\#<Friend:0x2b94aa8 @friend_name="Hans", @age="25\n"> 
\#<Friend:0x2b94a30 @friend_name="Peter", @age="20\n"> 
\#<Friend:0x2b949a0 @friend_name="Simon", @age="30"> 
\#<Friend:0x2b94a30 @friend_name="Peter", @age="20\n"> 


#Expected output 
"Hans", 25 
"Peter", 20 
"Simon",30 
"Peter", 20 
+1

「私は変数にこれらの友人・オブジェクトのそれぞれを割り当てたい」 - なぜあなたは別の変数として、あなたがそれらを必要とすると思いますか? –

+0

おそらくダンプするかもしれませんが、リスト配列を出したいと思ったとき、彼は私にオブジェクトIDを与えていました。それは変数に私は値を印刷することができます。 – Alassar

+0

FriendのオブジェクトIDはそれぞれのfriendオブジェクトがそれ自身の参照を持つ一意のオブジェクトであるためです。 'class friend 'に' to_s'メソッドを追加してみませんか?これは、あなたがオブジェクトリストを覗き見ることができるようになります。ダンプのようなことをするには、あなたの 'list'の友人を反復してデータをダンプするメソッドを実装する必要があります。 – kiddorails

答えて

0

私は彼が私にオブジェクトIDを与えているリストアレイを出しwhant私はそれを変数に当てると、値を印刷することができると思いました。

あなたはFriendインスタンスの配列がある場合:次に

@list = [ 
    Friend.new('Hans', 25), 
    Friend.new('Peter', 20), 
    Friend.new('Simon', 30), 
    Friend.new('Peter', 20) 
] 

は、例えば、Friend#to_sを呼び出すことによって

puts @list.to_s 

意志出力配列の文字列表現を経由して、それを印刷:

friend = Friend.new('Hans', 25) 
friend.to_s 
#=> "#<Friend:0x007ffcc114e608>" 

オブジェクトID Friendto_sそれ自身を実装していないので、そうObject#to_sが呼び出され、示されている:

デフォルトto_sは、オブジェクトのクラスとオブジェクトIDのエンコードを印刷します。

所望の出力を得るために、あなたは、属性にeachおよび出力を介して次々配列を反復処理することができます:上記のコードで

@list.each do |friend| 
    puts "#{friend.friend_name}, #{friend.age}" 
end 

を、friendはあなたが考えていた変数です。配列を反復する間に、eachはその変数に現在の要素を割り当てます。

出力:リストを

Hans, 25 
Peter, 20 
Simon, 30 
Peter, 20 
+0

'friend_name'はかなり冗長に見えます、私は属性を' name'と呼んでいます。 – Stefan

0

が反復:

@list.each do |l| 
    p l 
end 
関連する問題