2016-10-03 2 views
1

Как можно написать функцию filter, которая удалит последовательные номера из массива.Строка Swift удаляет последовательные номера через фильтр

Под последовательностью я имею в виду 1,2,3,4 форму последовательность против 1,3,5 (отсутствует 2 и 5).

Пример:

let input = [1,2,3,4,8,10,12,19] 
//Expected filter function. 
let output = [8,10,12,19] 
+0

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

+0

А, я плохо, я неправильно понял вопрос. – vadian

+0

Почему 1 исключен из вывода? –

ответ

2

Вы можете использовать flatMap, который действует как map и filter против ноля:

let output = input.enumerated().flatMap { index, element in 
    return index > 0 && input[index - 1] + 1 == element ? nil : element 
} 

print(output) // [1, 8, 10, 12, 19] 
1
let input = [1,2,3,4,8,10,12,19] 

func filterConsecutive(array: [Int]) -> [Int] { 

    guard array.count > 1 else { 
     return array 
    } 

    var result = [Int]() 
    for i in 0...array.count-2 { 
     let first = array[i] 
     let second = array[i+1] 
     if second != first + 1 { 
      result.append(second) 
     } 
    } 
    return result 
} 

let result = filterConsecutive(array: input) 
+0

если у меня есть два числа, например [1,2] thay последовательны, и он должен возвращать [], но не [1,2] –

+0

Отвечено обновлено Oleg – matsoftware

+1

Это не сработает, если первое число больше второго числа, потому что 'second-first' не будет больше 1, но они не являются последовательными числами. Проверка должна быть 'second! = First + 1' – EmilioPelaez

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