有數組[1,2,3,7,9,10,11,16]
請問如何快速優雅的獲取到.1-3,7,9-11,16
這樣的結果呢?
我想這是 先對數組sort 之後循環判斷當前值是否是上一個的+1. 根據結果進行字符串的拼接. 但是感覺很繁瑣. 不知道有什麼好的優雅的方式呢?
謝謝.
有數組[1,2,3,7,9,10,11,16]
請問如何快速優雅的獲取到.1-3,7,9-11,16
這樣的結果呢?
我想這是 先對數組sort 之後循環判斷當前值是否是上一個的+1. 根據結果進行字符串的拼接. 但是感覺很繁瑣. 不知道有什麼好的優雅的方式呢?
謝謝.
這邊是 Python 的版本 (抱歉不會 PHP):
<code class="python">import itertools def group_by_range(lst): lst.sort() for key, group in itertools.groupby(enumerate(lst), lambda t: t[1]-t[0]): rp = list(group) head, tail = rp[0][1], rp[-1][1] yield '{}-{}'.format(head, tail) if head!=tail else str(head) if __name__ == '__main__': lst = [1,11,10,9,2,3,7,16] print(','.join(list(group_by_range(lst))))</code>
我回答過的問題: Python-QA
我第一個想法也是跟題主一樣=。 =