nspredicate multiple OR conditions [duplicate]

Самое быстрое решение, которое я нашел (для большого списка в любом случае):

import numpy as np
#turn list into an array and flatten()
np.array(l).flatten()

Готово! Вы можете, конечно, включить его в список, выполнив список (l)

34
задан dubbeat 26 April 2012 в 12:01
поделиться

3 ответа

Я сделаю следующее, используя SUBQUERY.

[NSPredicate predicateWithFormat@"(name == %@) AND (SUBQUERY(subs, $x, $x.numbervalue == %@ or $x.numbervalue == %@).@count > 0)", @"aname", value1, value2];

Попробуйте и дайте мне знать.

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

Надеюсь, что это поможет.

Редактировать

Если вы следуете совету Eimantas, обязательно создайте правильный массив:

NSNumber valueA = [NSNumber numberWithInt:20];
NSNumber valueB = [NSNumber numberWithInt:90];
NSArray *arr = [NSArray arrayWithObjects:valueA, valueB, nil];
33
ответ дан Lorenzo B 31 August 2018 в 09:40
поделиться

Дополнение к ответу @ Стюарта, вы можете использовать NSCompoundPredicate для вашего OR & amp; И такие операции:

Obj-C - OR

// OR Condition //

NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"X == 1"];
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"X == 2"];
NSPredicate *predicate = [NSCompoundPredicate orPredicateWithSubpredicates:@[predicate1, predicate2]];

Obj-C - AND

NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"X == 1"];
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"X == 2"];
NSPredicate *predicate = [NSCompoundPredicate andPredicateWithSubpredicates:@[predicate1, predicate2]];

Swift - OR

let predicate1:NSPredicate = NSPredicate(format: "X == 1")
let predicate2:NSPredicate = NSPredicate(format: "Y == 2")
let predicate:NSPredicate  = NSCompoundPredicate(orPredicateWithSubpredicates: [predicate1,predicate2] )

Swift - AND

let predicate1:NSPredicate = NSPredicate(format: "X == 1")
let predicate2:NSPredicate = NSPredicate(format: "Y == 2")
let predicate:NSPredicate  = NSCompoundPredicate(andPredicateWithSubpredicates: [predicate1,predicate2] )

Swift 3 - OR

    let predicate1 = NSPredicate(format: "X == 1")
    let predicate2 = NSPredicate(format: "Y == 2")
    let predicateCompound = NSCompoundPredicate.init(type: .or, subpredicates: [predicate1,predicate2])

Swift 3 - AND

    let predicate1 = NSPredicate(format: "X == 1")
    let predicate2 = NSPredicate(format: "Y == 2")
    let predicateCompound = NSCompoundPredicate.init(type: .and, subpredicates: [predicate1,predicate2])
58
ответ дан Onur Var 31 August 2018 в 09:40
поделиться

Другим вариантом является использование NSCompoundPredicate (note иPredicateWithSubpredicates выполняет AND, но есть несколько вариантов использования, это должно быть намного более эффективно, чем выполнение 2 запросов).

https: // developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSCompoundPredicate_Class/index.html#//apple_ref/occ/clm/NSCompoundPredicate/andPredicateWithSubpredicates:)

1
ответ дан Stuart P. 31 August 2018 в 09:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: