请问如何优雅的实现数组的这样的需求呢?

发布于 2022-09-03 12:29:56 字数 200 浏览 14 评论 0

有数组[1,2,3,7,9,10,11,16]

请问如何快速优雅的获取到.1-3,7,9-11,16

这样的结果呢?

我想这是 先对数组sort 之后循环判断当前值是否是上一个的+1. 根据结果进行字符串的拼接. 但是感觉很繁琐. 不知道有什么好的优雅的方式呢?

谢谢.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

随梦而飞# 2022-09-10 12:29:56

這邊是 Python 的版本 (抱歉不會 PHP):

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))))

我回答過的問題: Python-QA

还不是爱你 2022-09-10 12:29:56

我第一个想法也是跟题主一样=。=

冰葑 2022-09-10 12:29:56

代码虽然感觉有些繁琐,但是运行的时间复杂度是O(n)啊,所以这种方式算是挺可行的了吧

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文