2011-08-17 94 views
0

我想知道是否有人用數字組織數組,但是如果有一個簡單的方法將數組推向下一個不存在的數字我想創建一個多維有序數組,其中如果數字發生衝突(例如2頁有1),那麼第一個將是[1] [1],第二個將是[1] [2],但是存在更好的方式來處理這個?Ruby:有序數組並添加到數組中,如果數字存在

編輯;一個例子:

page1 -> sets order to 1 
page2 -> sets order to 1 
page3 -> sets order to 2 

通常我會去通過,並YAML閱讀網頁的配置和獲得訂單,然後使用這個號碼,並設置_site.sidebar[_config["order"]]但在這種情況下,它會發生衝突,它不會添加它。因此,我正在尋找一種方法來允許用戶犯錯,但保留第一個作爲一個的順序,但是如果存在,則將該陣列向下移動並將第二個1作爲兩個。

+0

我無法理解你。你能舉一個例子嗎? – fl00r

+0

所以,如果我理解正確,假設你有數組[1] [2] [3],[4] [1] [5]和[1] [2] [1],你會希望得到的順序是[1] [2] [1],[1] [2] [3]和[4] [1] [5]。那是對的嗎? – jefflunt

+0

我用一個例子更新了這個問題。 –

回答

2

這聽起來像你正在實現一個哈希表,並使用'數字'作爲哈希。有各種各樣的算法,只需查找散列表算法。

+0

從規格看起來像散列表和數字將做一份工作 –

0

這是關於我如何實現我所詢問的最後一個片段,以防萬一別人在這個線程上找到同樣的東西時絆倒。我基本上只是想維護順序,在我使用普通多維數組的代碼的實際應用程序中,因爲「順序」是從YAML前端提取的,所以它是它自己的變量。

data = [] 
demo = { 
    "page_1" => { 
    "order" => 1, 
    "data" => "Hello World 1" 
    }, 
    "page_2" => { 
    "order" => 2, 
    "data" => "Hello World 2" 
    }, 
    "page_3" => { 
    "order" => 1, 
    "data" => "Hello World 3" 
    }, 
    "page_4" => { 
    "order" => "a", 
    "data" => "Hello World 4" 
    } 
} 

demo.each |key, page| 
    local_data = page["data"] 
    order  = page["order"].to_i.floor 

    data[order] ||= [] 
    data[order] << local_data 

} 
puts data.flatten.join(" ").strip 
相關問題