0

摘要:我正在尝试找出一种存储、排序和平均相关数据的好方法,这些数据在从文件中读取后分组到对象中。我有两个相关的问题:

<=>1)覆盖以不同的顺序对对象进行排序同时还覆盖equ?说它们相等是一种可接受的做法吗?

2) 有没有办法检查哈希,has_key?其中has_key?读取多个参数以执行和检查哈希?

详情

我正在从文本文件中读取大量数据,我想对它进行排序,并排除最高和最低值,并计算平均值。为了使这个问题更具体,我的输入集由以下字符串组成:

field1 field2 field3 value1 value2

(注意它更复杂,但我已经进行了解析以提取这些值)。

最初我创建了一个类,如:

class data
  def initialize
    @field1
    @field2
    @field3
    @value1
    @value2
  end
end

我还重新定义了比较运算符<=>,以便它首先在field1thenfield2和 finally上排序field3。这使我可以打印出按我想要的顺序排序的所有数据。

但是现在我想做的是在所有字段都相同时将不同的值平均在一起。我还希望能够在进行平均之前对条目进行排序并删除最高和最低值。field1 field2那就是我希望能够field3将相同的条目分组。value1然后通过删除最高和最低条目对这些分组条目进行排序,然后将剩余结果平均在一起。

我的一个想法是扩展类定义以包含一个存储value1value2. 然后我会将对象插入哈希表中,如果哈希存在,则向对象添加新值。但我不确定如何或是否可以使用多个字符串来检查哈希是否具有特定键。

我假设我可以覆盖hashandequ?运算符,以便具有相同值的对象field1 field2field3散列到相同的位置。我不确定的一件事是说对象与 相等equ?但用<=>.

或者,也许 Ruby 有一种更简单的方法来解决我正在处理的问题,而我想到的解决方案比它需要的更复杂。

4

1 回答 1

1
#define: Hash#has_keys?
class Hash
    def has_keys? *args
        args.all?{|k| self.keys.include? k } unless self.keys.empty?
        # returns true if hash has all keys
        # returns false otherwise
        # returns nil if the hash is empty?
    end
end

不太确定其余的。

于 2012-12-09T12:09:09.480 回答