2017-02-05 4 views
1

У меня возникли проблемы с поиском эффективного способа фильтрации моих данных. То, что я получил до сих пор:Применить фильтр диапазона на массиве

структуру, как это:

struct BasicData { 
    let n0 : Double! 
    let n1 : Double! 
    let n2 : Double! 
} 
var basicData = [BasicData]() 

После добавления в массив с помощью:

basicData.append(BasicData(n0: 55.15, n1: 5.1, n2: 2)) 
basicData.append(BasicData(n0: 2, n1: 2.1, n2: 25)) 
basicData.append(BasicData(n0: 45.15, n1: 5.1, n2: 15)) 

Я хочу, чтобы создать новый массив, который содержит все элементы, n0 > 5 && n0 < 50 и n2 > 7 && n2 < 40

+1

Почему 'свойства BasicData' объявили, как IUOs если вы» re дает им значения при инициализации? Вы должны сделать их не факультативными. – Hamish

ответ

2

Как уже упоминалось в комментариях по @Hamish вы должны сделать ваши Структуры Свойства, не являющиеся УСТРОЙСТВА:

struct BasicData { 
    let n0: Double 
    let n1: Double 
    let n2: Double 
} 

Чтобы отфильтровать массив, который вы можете использовать шаблон оператор диапазона ~=. Если вам необходимо сделать свой старт диапазона от первой фракции числа больше, чем нижней границы вашего диапазона вы можете использовать двойное свойство .nextUp следующим образом:

let filtered = basicData.filter {5.nextUp..<50 ~= $0.n0 && 7.nextUp..<40 ~= $0.n2 } 
2
let filteredData = basicData.filter({$0.n0 > 5 && $0.n0 < 50 && $0.n2 > 7 && $0.n2 < 40}) 
Смежные вопросы