摘要:我試圖找出一種很好的方法來存儲,排序和平均從文件讀取後分組到對象中的相關數據。我有兩個相關的問題:覆蓋<=>和equ?在Ruby中使用不同的設置
1)可以接受的做法是覆蓋<=>
以便按不同的順序對對象進行排序,同時覆蓋equ?
表示它們相等嗎?
2)有沒有一種方法來檢查散列has_key?
其中has_key?
讀取多個參數來執行和檢查散列?
詳細:
我讀大量從一個文本文件中的數據,我想要做的操作就可以了,我對它進行排序,並排除最高值和最低值,並計算平均值。爲了使這個問題更具體的我輸入集包含字符串,如:
field1 field2 field3 value1 value2
(注意:這是比較複雜的,但我已經得到了解析工作已經提取這些值)。
最初我已經創建了一個類,如:
class data
def initialize
@field1
@field2
@field3
@value1
@value2
end
end
我也重新定義了比較操作<=>
,使其第一排序上field1
然後field2
終於field3
。這允許我打印出所有按照我想要的順序排序的數據。
但是現在我想要做的就是在所有字段相同時將不同的值平均在一起。我還希望能夠對條目進行排序,並在進行平均之前刪除最高和最低值。那就是我希望能夠將field1
field2
和field3
相同的條目分組。然後按value1
排序這些分組條目,刪除最高和最低的條目,然後將剩餘結果平均到一起。
我想到的一個想法是擴展類定義以包含存儲value1
和value2
的數組。然後,我會將對象插入散列表中,並在存在散列的情況下向對象添加新值。但我不知道如何或者如果我可以使用多個字符串來檢查散列是否有特定的鍵。
我以爲我可以覆蓋hash
和equ?
運營商,以便與field1
field2
和field3
相同值的對象將返回相同的位置。我不確定的一件事是,說明對象與equ?
相等是好主意,但要讓它們按<=>
以不同順序排序。
或者也許在Ruby中有一種更簡單的方法來解決我正在處理的問題,並且我想到的解決方案比需要的更復雜。
我還沒有讀完整個問題,但看起來你想創建一個比較器。你有沒有檢出Ruby [可比較的mixin模塊,鏈接到這裏](http://www.ruby-doc.org/core-1.9.3/Comparable.html)? –
您是否考慮過將數據扔到數據庫中並讓它完成繁重的工作?即使SQLite也會吃這個東西。 –
我已經使用過可比較的mixin。我需要弄清楚的是,如何與哈希交互?或者,也許這並不重要,這是我想知道的一部分。 –