2010-11-22 105 views
0

我正在嘗試製作我需要的程序。我有一個自定義類,我需要該類的一個對象數組。這個自定義類有一些在程序過程中發生變化的屬性。 如何在數組中找到特定對象,以便我可以訪問它並進行更改?Ruby數組對象查找

class Mathima 
    attr_accessor :id, :tmimata 

    def initialize(id) 
    @id = id 
    @tmimata = [] 
    end 
end 


# main 
mathimata = [] 

previd = id = "" 
File.read("./leit/sortedinput0.txt").lines do |line| 
    array = line.split(' ')   # i am reading a sorted file 
    id = array.delete_at(0)   # i get the first two words as the id and tmima 
    tmima = array.delete_at(0) 

    if previd != id 
    mathimata.push(Mathima.new(id)) # if it's a new id, add it 
    end 

    # here is the part I have to go in mathimata array and add something in the tmimata array in an object. 

    previd = id 
end 
+0

怎麼辦你確定你想添加什麼Mathima對象?那是什麼「東西」,它是tmima的內容嗎? – 2010-11-22 13:43:25

+0

謝謝大家。我用mathimata的散列,它工作得很好。 – pvinis 2010-11-24 07:09:43

回答

2

使用mathimata格雷戈一個哈希指出:

mathimata = {} 
File.read("./leit/sortedinput0.txt").lines do |line| 
    id, tmima, rest = line.split(' ', 3) 
    mathimata[id] ||= Mathima.new(id) 
end 
+1

由於'ids'變長,由於查找的原因,它會變得越來越慢。哈希將會更快。 – 2010-11-22 15:41:40

+0

謝謝!散列使​​代碼更簡單 – 2010-11-22 22:00:32

2
mathima = mathimata.find{|mathima| mathima.check() } 
# update your object - mathima 
0

Array.find(),您可以依次通過搜索一個數組,但不能很好地擴展。

我建議如果你正在處理很多對象或元素,而且它們是唯一的,那麼哈希將會好得多。哈希允許基於鍵的索引查找。

因爲你是隻保留唯一ID或者是設置或哈希將是一個不錯的選擇:

mathimata.push(Mathima.new(id)) # if it's a new id, add it 

集是數組和哈希之間。它只允許集合中的唯一條目,所以它就像一個獨佔的Array。它不允許通過像哈希這樣的鍵來查找/訪問。

此外,您還可以得到一個更紅寶石般的方式你的前兩個單詞:

array = line.split(' ')   # i am reading a sorted file 
id = array.delete_at(0)   # i get the first two words as the id and tmima 
tmima = array.delete_at(0) 

通常會被寫成:

id, tmima = line.split(' ')[0, 2] 

或:

id, tmima = line.split(' ')[0 .. 1]