2011-12-08 66 views
0

我使用Ruby和有一個哈希值,稱之爲foo,其值是具有2如何更新哈希值的數組?

一個固定長度的數組如何更新的散列值陣列中的索引中的一個?這裏有一個例子:

foo.each do |k, v| 
    if k == 'some value' 
    foo[k] = update v[0] 
    foo[k] = update v[1] 
    end 
end 

進一步澄清:

我循環通過一個文件,裏面我想看看如果當前行的哈希鍵k相匹配。如果是這樣,我想更新存儲在v[1]中的values數組中的時間戳。

# read lines from the input file 
File.open(@regfile, 'r') do |file| 
    file.each_line do |line| 
    # cache control 
    cached = false 

    # loop through @cache 
    @cache.each do |k, v| 
     # if (url is cached) 
     if line == k 
     # update the timestamp 
     @cache[k] = Time.now.getutc # need this to be put in v[1] 

     # set cached to true 
     cached = true 
     end 
    end 

    # if cached go to next line 
    next if cached 

    # otherwise add to cache 
    updateCache(line) 
    end 
end 
+0

爲什麼不只是設置foo的[K] [0] = NEW_VALUE; foo [k] [1] = new_value2 – klochner

+2

顯示輸入/預期輸出的一些示例,以便我們可以更好地理解您的問題。 –

+0

@klochner我打算試試,但我不確定是否打字foo [k] [1]會更新v的數組中的第二個位置。 – CoryDorning

回答

3
# cache control 
cached = false 

# loop through @cache 
@cache.each do |k, v| 
    # if (url is cached) 
    if line == k 
    # update the timestamp 
    @cache[k] = Time.now.getutc # need this to be put in v[1] 

    # set cached to true 
    cached = true 
    end 
end 

# if cached go to next line 
next if cached 

# otherwise add to cache 
updateCache(line) 

更好和更快的解決方案:

if @cache.include? line 
    @cache[line][1] = Time.now.utc 
else 
    updateCache(line) 
end 
+1

'cached = true' =>'else updateCache(line)end'和'cached'不是必需的 –

+0

@VictorMoroz:謝謝。我更新了答案。 –

2
foo = { 'v1' => [1, 2], 'v2' => [3, 4] } 

foo.each do |k, v| 
    v[0] += 10 
    v[1] += 10 
end 

p foo # {"v1"=>[11, 12], "v2"=>[13, 14]} 
+0

我認爲這是我想要的。現在嘗試。 – CoryDorning

+0

這似乎沒有更新我的散列鍵陣列。 – CoryDorning