在程序中创建和添加数组 - Ruby

时间:2014-01-18 05:28:28

标签: ruby arrays

我是一个相当新的Ruby用户,我想知道如何在程序中创建和编辑数组。我正在创建一个句子生成器类型的程序,你可以在其中添加名词,动词和其他句子部分的数组,但我目前还不确定如何首先制作数组。 这是代码:

    #!/usr/bin/ruby Make_a_Sentence!


#This will eventually create the sentence
    def makeSent (*arg)
        for i in 0...arg.length
            print arg[i].sample if arg[i].kind_of?(Array)
            print arg[i] if arg[i].kind_of?(String)
        end
    end

#this is supposed to add to the array (it's not working)
    def addWord (array, word)
        if array.kind_of?(Array)
            array.push(word)
            puts "#{ word } added to #{ array }"
        else
            puts "#{ array } does not exist"
        end
    end

#This is supposed to create the arrays
    def addType (name)
        @name = Array.new
        puts "#{ name } created"
    end

    while 1 > 0
        input = gets
        $words = input.split
        if $words[0] == "addWord" && $words.length == 3
            addWord($words[1], $words[2])
        end
        if $words[0] == "addType" && $words.length == 2
            addType($words[1])
        end
    end

**抱歉!我想我没有说好问题!我主要想知道如何在程序运行时创建新数组,但数组具有给定的特定名称。实际上我最后只是使用哈希,但感谢你的回复!

2 个答案:

答案 0 :(得分:0)

制作Array就像这样:

array = ["val1","val2","val3"] 
array = %w{value value value} 
 # The second example is a shorthand syntax (splits values with just a space)

熟悉文档:http://www.ruby-doc.org/core-2.1.0/Array.html

此外,当您使用以下方法时,def makeSent (*arg)只需要注意*args前面有*的方法,就是所谓的splat。这意味着此方法在没有[]语法的情况下接受许多参数,并自动将所有参数转换为数组。

因此,您可以将此方法称为:makeSent (first, second, third, etc)

答案 1 :(得分:0)

创建数组很简单:只需将对象括在方括号中,如下所示:

my_array = [12, 29, 36, 42]
another_array = ['something', 64, 'another', 1921]

请注意,您可以在数组中混合和匹配类型。如果要将项添加到数组的末尾,可以使用<<来执行此操作:

my_array = [1, 3, 5, 7]
my_array << 9
# my_array is now: [1, 3, 5, 7, 9]

您可以通过在方括号内对其进行索引来访问和修改数组中的特定项目:

my_array[2]  # <-- this will be  5, as arrays are 0-indexed
my_array[2] = 987
# my_array is now [1, 3, 987, 7, 9]

有很多很棒的方法可以访问,修改和比较你可以find in the documentation的数组。