如何创建对象数组?

时间:2013-11-25 04:22:47

标签: ruby arrays object

如何创建一个对象数组,如下面的C ++示例?

Ruby的做法是什么Print print[1000];

以下代码是C ++。我只是想知道Ruby是否有实例化类的1000个唯一对象的选项:

class Print
{

public:
    Print()
    {
        static int count = 0;
        cout<<"h"<<++count<<endl;
    }
};

int main()
{    
    Print print[1000];
    getchar();
    return 0;
}

5 个答案:

答案 0 :(得分:3)

要获得1000个实例化的字符串副本,我们可以这样做:

collection_of_strings = Array.new(1000, String.new('h'))
print collection_of_strings

这是存储在数组中的相同对象。然后打印出那个阵列。

这种具有给定块的Array.new形式将创建一个单独实例化的对象,但是很多次你给出了参数:

>> collection = Array.new(10) {String.new}   
=> ["", "", "", "", "", "", "", "", "", ""] 

通过检查数组中每个对象的object_id来证明。

>> collection.each {|e| puts e.object_id}    
85621980                                     
85621970                                     
85621960                                     
85621950                                     
85621940                                     
85621930                                     
85621920                                     
85621910                                     
85621900                                     
85621890                                     
=> ["", "", "", "", "", "", "", "", "", ""]  

答案 1 :(得分:3)

鉴于此

  

“我想count是一个全局变量,输出看起来像:”h0 h1 h2 h3“

以下内容应该有效(详见Array#new块[1])。它不需要外部变量,块传递数组的索引:

Array.new(1000) {|count| "h#{count}"}

将它们全部放在一个字符串中,尝试:

Array.new(1000) {|count| "h#{count}"}.join(' ')

[1] http://ruby-doc.org/core-2.0.0/Array.html#method-c-new

答案 2 :(得分:0)

要使用Ruby获取该输出,您可以执行:puts (0..999).to_a

或者,如果你想要'你可以这样做:(0..999).each {|n| puts "h#{n}"}

答案 3 :(得分:0)

替代ThomasW的回答:

output = []
1000.times do |i| { output << "h#{i}" }

答案 4 :(得分:0)

是的!在将C ++翻译成Ruby时,我想出了这个:

#create dummy class
class Kraken
  # equivalent to your C++ static variable which I think
  # should be declared outside the constructor
  @@count = 0

  # increment the count class variable on every 
  def initialize
    @@count = @@count + 1
  end
end

# Release the Kraken!
kraken = Array.new(1000) { Kraken.new }