首頁  >  文章  >  後端開發  >  請問如何優雅的實現數組的這樣的需求呢?

請問如何優雅的實現數組的這樣的需求呢?

WBOY
WBOY原創
2016-08-18 09:16:23952瀏覽

有數組[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

我第一個想法也是跟題主一樣=。 =

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn