2013-07-18 35 views
0

排序後的數組在bash I'have排序的整數數組,如:我如何在範圍組整數中擊

array[0]=1 
array[1]=2 
array[2]=3 
array[3]=4 
array[4]=7 
array[5]=9 
array[6]=10 
array[7]=13 
array[8]=15 
array[9]=16 

而想要獲得輸出像:

1-4 ,7,9-10,13,15-16

有一種簡單而快速的方法來做到這一點?

+0

對不起我的錯誤,已經糾正了這個問題。它是一個整數的排序數組。 –

+1

這個分組是否有任何邏輯,或者它只是隨機的? – anubhava

+1

對我來說,它看起來像它的連續數字分組?像11,12,13,15變成11-13,15 – Jite

回答

1

我不知道有任何標準的做法,但不應該很難寫出自己的功能來做到這一點。東西的線:

  • 保存所述第一陣列元素的值「爲「低」
  • 迭代陣列之上並保存當前的「指數」爲「高」
  • 當陣列「價值」的不同之從'索引'打印出'低 - 高'如果不是'低==',則打印'低'
  • 將'低'和'索引'重置爲當前'值'並繼續
  • 增加'索引'by one

對於預先排序的非空整數數組,應該足夠簡單:

(對不起,關於格式化,我目前在一臺帶有PC鍵盤的Mac上,並且我沒有很好地相處。 )

+0

thxs爲答案吉特,我最初的方法是迭代數組元素,看看是否當前元素等於上一個元素-1,如果不是以過去元素結束當前範圍並開始新範圍。但我認爲應該有一個更優雅的方式來做到這一點。 –

+0

是的,這是我試圖解釋的同樣的方法。就像檢查'(curr-1)== prev'一樣,你需要將起始元素的索引/值保存在一個範圍內,因爲它的範圍可能會超過幾個元素。關於解決方案:有人必須遍歷數組,無論是你的代碼,外部腳本還是其他二進制文件都取決於你:) – Jite

+0

非常感謝,我接受了你的答案。將繼續採用這種方法。同樣值得注意的是,如果起始元素等於rage中的最後一個元素,則只打印元素而不是starting_element-last_element。 –