迭代变量进行对象分配

时间:2017-08-17 09:02:50

标签: ruby csv iterator

我是新来的和红宝石的新手: 我有两个类(类朋友,类列表)和一个名称和年龄的csv-File。当我在csv-File中读取时,我在整个File中创建了一个新的列表对象,并希望在文件的每一行中创建一个新的friends-object。

现在我的问题: 我想将每个友元对象分配给一个变量,但我不知道如何遍历变量。

require_relative'friend'

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

2 个答案:

答案 0 :(得分:0)

  

当我想放出列表数组时,他给了我对象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

答案 1 :(得分:0)

遍历列表:

<?php
include '../sys/conn.php';
$brands = mysqli_query ($conn, "
*(query to select brands name and id)*
") or die ("Query not valid: " . mysqli_error($conn));
mysqli_close($conn);
?>
...
 <form role="form" >
<label>Brands List</label>
<select class="form-control" name='brands list'>
   <?php while ($listabrand=mysqli_fetch_array($brands)){
      echo '<option>'.$listabrand['0'].' - '.$listabrand['1'].'</option>';
   }?>
</select>                                      
...                               
<label>Modify Brand</label>
<input type="text" name='brand-name' class="form-control" required placeholder="Brand Name to modify">
</form></html>