N個のキーを持つ辞書の配列があります。いくつかのキーのみを含む一意のdictの配列を作成したいと思います。
例。私の口述:
{
"m_anno" = 2017;
"m_c_ultimo" = "4.130";
"m_cod" = 4522;
"m_cod_art" = "*B";
"m_des" = "SCRITTA BIANCA NISSAN";
"m_ditta" = SIS;
"m_prz" = "0.000";
"m_qta" = "1.000";
"m_sconto" = {
};
},
{
"m_anno" = 2017;
"m_c_ultimo" = "25.020";
"m_cod" = 4522;
"m_cod_art" = "000/01200";
"m_des" = "CABLAGGIO X TIMONE";
"m_ditta" = SIS;
"m_prz" = "0.000";
"m_qta" = "1.000";
"m_sconto" = {
};
},
{
"m_anno" = 2017;
"m_c_ultimo" = "1.000";
"m_cod" = 4523;
"m_cod_art" = 000000;
"m_des" = "BLISTER O-RING 3106";
"m_ditta" = SIS;
"m_prz" = "0.000";
"m_qta" = "1.000";
"m_sconto" = {
};
},
m_annoキーとm_codキーの一意の値を取得したい。期待される結果:
{
{
"m_anno" = 2017
"m_cod" = 4522
}
{
"m_anno" = 2017
"m_cod" = 4523
}
}
最も簡単な方法はどれですか?
基本的に、ペアがまだ存在しない場合は、配列を反復処理して(クエルサプライズ!)、コレクションに配置する必要があります。2番目のタスクは、次のインスタンスを使用するNSSet
かNSOrderedSet
、順序を保持する必要があるという要件に応じて実行できます。
NSArray *values = …; // You start with this
NSMutableOrderedSet *uniquePairs = [NSMutableOrderedSet new];
for( NSDictionary *value in values )
{
NSDictionary *pair = @{ @"m_anno":[value objectForKey:@"m_anno"], @"m_cod":[value objectForKey:@"m_cod"] }; // Create smaller version
[uniquePairs addObject:pair];
}
もっとエレガントな方法があるかもしれません。(視点による)
辞書への追加を作成します。これにより、配列が目的のキーに削減されます。
NSDictionary( UnifyAnnoAndCodeAddition )
- (NSDictionary*)annoAndCod
{
return @{ @"m_anno":[self objectForkey:@"m_anno"], @"m_cod":[self objectForKey:@"m_code"]};
}
次に、Key-Valueコーディングを使用して、縮小された辞書の配列を作成し、次のセットを作成します。
NSArray *values = …; // You start with this
NSArray *pairs = [values valueForKey:@"annoAndCod"];
NSOrderedSet = [NSOrderedSet orderedSetWithArray:pairs];
まあ、少なくともそれは短いです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加