使用某些操作创建一个数组类来实现

时间:2013-08-10 01:08:12

标签: ruby arrays class methods

我目前正在开发一个基本的Ruby编程项目,专注于创建类和对这些类的操作。我的经验很少,但了解Ruby的一般概念。

我的任务是创建一个Array2类。从类创建数组,对数组执行操作。我尝试的方法是to-string方法,is-reverse方法有两个数组参数,并测试第一个数组是否与第二个数组相反。

这是我的尝试,我尝试但是我无法将数组正确地传入课堂。另外我相信我有一些呼唤并发症。

class Array2
def initialize (a)
    @array = Array.new(a)
end

def to_s
    return @array
end

def isreverse (array1,array2)
    reverasea = Array.new
    reverasea = array1.reverse
    if  (reversea = array2) then
        return "The First Array Is The Reverse Of The Second Array"
    else
        return "The First Array Is Not The Reverse Of The Second Array"
    end
end
end

array1 = ["4","5","6","7"]
array2 = ["7","6","5","3"]

a1 = Array2.new(array1)
a2 = Array2.new(array2)

puts a1.to_s
puts a2.to_s
puts a1.isreverse(array1, array2)

3 个答案:

答案 0 :(得分:1)

你有一个你可能意味着平等测试的任务:

 if  (reversea = array2) then

你可以完全省去reversea而只是测试(这需要Array2中的反向方法)

if (array1.reverse == @array) then

我个人会使isreverse成为一个布尔值,并且无需再次传入同一个数组:

def isreverse? (array1)
    return (@array.reverse == array1)
end

然后像

一样使用它
puts "The First Array Is#{a1.isreverse?(a2)?"":" Not"} The Reverse Of The Second Array"

将它们放在一起,它看起来像:

class Array2
    def initialize (a)
        @array = Array.new(a)
    end

    def to_s
        return @array
    end

    def reverse
        @array.reverse
    end

    def isreverse? (array1)
        return (array1.reverse == @array)
    end
end

array1 = ["4","5","6","7"]
array2 = ["7","6","5","3"]

a1 = Array2.new(array1)
a2 = Array2.new(array2)

puts a1.to_s
puts a2.to_s
puts "The First Array Is#{a1.isreverse?(a2)?"":" Not"} The Reverse Of The Second Array"

fiddle

答案 1 :(得分:1)

以下是对现有方法的一些调整。我在评论中添加了原始的::

class Array2
  def initialize (a)
    @array = Array.new(a)
  end

  def to_array   # to_s is a misnomer: it doesn't return a string
    return @array
  end

  def isreverse (a)
    #reverasea = Array.new  NOTE this is not needed; the following .reverse creates a new array for you
    reversea = a.to_array.reverse  # get the reverse of the array represented

    # NOTE = is assign, == is compare in this case
    # The following compares the reversed of the array `a` with the array value of this class, @array
    if  (reversea == @array) then
      return "The First Array Is The Reverse Of The Second Array"
    else
      return "The First Array Is Not The Reverse Of The Second Array"
    end
  end
end

array1 = ["4","5","6","7"]
array2 = ["7","6","5","3"]

a1 = Array2.new(array1)
a2 = Array2.new(array2)

puts a1.to_array  # (renamed)
puts a2.to_array  # (renamed)
#puts a1.isreverse(array1, array2)  NOTE you don't need to pass array1 into class a1 since it is already made from array1
puts a1.isreverse(a2)

答案 2 :(得分:1)

我会选择更简单的东西,例如:

Filename: reverser.rb

class Reverser
  def self.is_reverse_of(array1,array2)
    array1_reversed=array1.reverse
    is_or_isnt= (array1_reversed==array2)? 'Not ' : ''
    return "The First Array Is #{is_or_isnt}The Reverse Of The Second Array"
  end
end
puts Reverser.is_reverse_of(["4","5","6","7"], ["7","6","5","4"])
puts Reverser.is_reverse_of(["4","5","6","7"], ["7","6","5","3"])

ruby reverser.rb
The First Array Is Not The Reverse Of The Second Array
The First Array Is The Reverse Of The Second Array

这个想法是使用类级别的方法而不是实例化那么多并且代码更少。