2013-07-18 2 views
0

В Баш I'have отсортированного массива целых чисел, как:Как группа в диапазонах отсортированный массив целых чисел в Bash

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

Я не знаю никаких стандартных способов сделать это, но не так сложно написать свою собственную функцию, чтобы сделать это. Что-то в линиях:

  • Сохранить первые элементы массива в значение ", как«низкий»
  • перебрать массив и сохранить текущий«индекс», как«высокий»отличается
  • Когда массив«значение» из 'index', распечатать 'low-high' IF, а не 'low == high', затем напечатать 'low'
  • Сбросить 'низкий' и 'индекс' на текущее 'значение' и продолжить
  • Увеличить индекс 'на одного

Должно быть достаточно простым псевдо для предварительно отсортированного непустого целочисленного массива :)

(Извините за форматирование, сейчас я нахожусь на Mac с клавиатурой ПК, и я не лажу с ним очень хорошо.)

+0

Thxs для ответа Jite, мой первоначальный подход состоял в том, чтобы перебирать элементы массива, глядя, текущий элемент равен предыдущему элементу-1, если не заканчивается текущий диапазон с прошлым элементом и начинается новый диапазон. Но я думал, что должен быть более элегантный способ сделать это. –

+0

Да, это был тот же подход, который я пытался объяснить. Как и проверка if '(curr-1) == prev' и что вам нужно сохранить индекс/значение исходного элемента в диапазоне, так как диапазон может достигать нескольких элементов. Что касается решений: кто-то должен перебирать массив, независимо от того, зависит ли ваш код, внешний скрипт или другой двоичный файл :) – Jite

+0

Thxs очень, я принял ваш ответ. Будет продолжен этот подход. Также как примечание, если начальный элемент равен последнему элементу в ярости, напечатайте только элемент вместо start_element-last_element. –

Смежные вопросы