Eu tenho uma variedade de dicionários.
Quero filtrar a matriz com base em uma chave.
Eu tentei isso:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SPORT == %@)", @"Football"];
NSArray *filteredArray = [data filteredArrayUsingPredicate:predicate];
Isso não funciona, não obtenho resultados. Acho que estou fazendo algo errado. Eu sei que este é o método se "SPORT" fosse um ivar. Acho que provavelmente é diferente se for uma chave.
Não fui capaz de encontrar um exemplo, entretanto.
obrigado
Atualizar
Eu adicionei aspas ao redor da string que estou procurando.
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SPORT == '%@')", @"Football"];
Ele ainda não funciona.
Atualização 2
Resolvi-o. Na verdade, tive que remover as aspas simples, o que parece ir contra o que o guia diz.
Meu verdadeiro problema é que eu tinha um array aninhado e não estava realmente avaliando os dicionários. Movimento de cabeça de osso.
objective-c
cocoa
nsarray
nsdictionary
nspredicate
Corey Floyd
fonte
fonte
Respostas:
Deve funcionar - desde que a variável de dados seja na verdade uma matriz contendo um dicionário com a chave SPORT
Filtrado neste caso contém o dicionário.
(o% @ não precisa ser citado, isso é feito quando o NSPredicate cria o objeto).
fonte
Eu sei que é notícia velha, mas para somar meus dois centavos. Por padrão, eu uso os comandos em
LIKE[cd]
vez de apenas[c]
. O[d]
compara letras com símbolos de acento. Isso funciona especialmente bem no meu Warcraft App, onde as pessoas soletram seu nome "Vòódòó", tornando quase impossível procurar por seu nome em um tableview. As[d]
tiras seus símbolos de acento durante o predicado. Portanto, um predicado de@"name LIKE[CD] %@", object.name
ondeobject.name == @"voodoo"
retornará o objeto contendo o nome Vòódòó.Da documentação da Apple: como [cd] significa “não sensível a maiúsculas e minúsculas, como.”) Para uma descrição completa da sintaxe da string e uma lista de todos os operadores disponíveis, consulte Sintaxe da string de formato de predicado .
fonte
fonte
NSPredicate
está disponível apenas no iPhone 3.0.Você não notará isso até tentar rodar no dispositivo.
fonte
Com o Swift 3, quando você deseja filtrar uma matriz de dicionários com um predicado baseado em chaves e valores de dicionário, você pode escolher um dos seguintes padrões.
# 1. Usando o
NSPredicate
init(format:arguments:)
inicializadorSe você vem de Objective-C,
init(format:arguments:)
oferece um estilo de codificação de valor-chave para avaliar seu predicado.Uso:
# 2. Usando o
NSPredicate
init(block:)
inicializadorComo alternativa, se você preferir APIs fortemente tipadas em vez de APIs com strings , você pode usar o
init(block:)
inicializador.Uso:
fonte
Olhando a referência NSPredicate , parece que você precisa colocar seu caractere de substituição entre aspas. Por exemplo, seu predicado atual lê:
(SPORT == Football)
Você deseja que seja lido(SPORT == 'Football')
, então sua string de formato precisa ser@"(SPORT == '%@')"
.fonte