2017-08-17 104 views
0

即時通訊新的和新的紅寶石: 我有兩個類(朋友類,類列表)和一個csv文件的名稱和年齡。當我在csv-File中讀取時,我從整個文件中創建了一個新的列表對象,並且希望從該文件的每一行創建一個新的朋友對象。迭代對象分配的變量

現在我的問題: 我想爲這些朋友對象分配一個變量,但我不知道如何迭代變量。

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

也許是dump,但是當我放棄列表數組時,他給了我對象id,我認爲當我分配它到一個變量,然後我可以打印出價值。 – Alassar

+0

它給出了朋友的對象ID,因爲每個朋友對象都是具有自己引用的唯一對象。爲什麼不在'class Friend'中添加'to_s'方法?這會讓你在對象列表中偷偷地看一眼。要獲得類似轉儲的東西,你必須實現一個方法,它迭代你的'list'的朋友並轉儲它的數據。 – kiddorails

回答

0

當我whant撲滅列表陣列他是給我的對象ID我認爲當我將它分配給一個變量時,我可以打印出該值。

如果有Friend實例的數組:

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

然後經由

puts @list.to_s 

將輸出陣列的字符串表示打印它通過調用Friend#to_s,例如:

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

對象ID顯示,因爲Friend沒有實現自己的to_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