2013-07-18 45 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。 –