2017-02-06 8 views
0

従業員のNSArrayをとる関数を記述したいと思います。それに代わって、給与合計がしきい値を超えるすべての従業員のリストを返すべきです。配列はまず、従業員の昇順の日付にソートする必要があります。対象cのNSArrayでキーパスクエリの値を書き込む方法

@interface Employee : NSObject 
@property NSString *name; 
@property EmployeeMetadata *empMetadata; 
@end 

@interface EmployeeMetadata : NSObject 
@property NSString *salary; 
@property NSDate *joiningDate; 
@end 

私は方法を次のコードを書かれている: - - :

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] 
            initWithKey:[NSString stringWithFormat:@"empMetadata.joiningDate"] 
            ascending:TRUE]; 
[employeeArr sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]]; 


NSInteger actual; 
NSInteger thresholdExceedIndex = -1; 
for (Employee *item in employeeArr) { 
    actual = actual + [item.empMetadata.salary integerValue]; 
    if(actual >= totalThresholdSalary) { 
     thresholdExceedIndex = [employeeArr indexOfObject:item]; 
     break; 
    } 
} 

// if exceeded delete employee in FIFO 
if(thresholdExceedIndex != -1) { 
    [self deleteEmployees:[employeeArr subarrayWithRange:NSMakeRange(0, (thresholdExceedIndex + 1))]] 
} 

私たちはどのように私はこの使用してNSArrayのvalueforkeypathを達成することができ、より良い方法

でこれを書くことができますクラスの構造は次のようになりますクエリ?

+0

辞書の配列である必要があります。 –

+0

@the_dahiya_boyなぜ辞書の配列にする必要がありますか? –

+0

あなたが書き込もうとしたコードをPlsに入れ、それが動作していない部分を示します。 – GeneCode

答えて

0

説明 - >なぜ辞書の配列が必要ですか?あなたは人nameと同じインデックスでそのcrossponding metadataを設定する必要があなたの要件ごとに

あなたの形式は、この

(
    { 
     "name" = "Balraj" 
     "metaData" = "your Data" // Whatever data is as per you set by the class 'EmployeeMetadata'. 
    }, 
    { 
     "name" = "tinu" 
     "metaData" = "mine Data" 
    } 
) 

ようにする必要があります。だから、あなたはこのように構成する必要があります。

ここでは説明のために文字列を取りますが、実際のシナリオでは、SalaryjoiningDataのような交差オブジェクトにさらにアクセスできるように、metaDataのオブジェクトを保存していません。

アクセスする方法をOBJECTS

と仮定は:あなたは成功した構造上記のとおり、すべてのレコードを保存しています。

だから、あなたは以下のような何かをしなければならないDOJデータをフェッチします

EmployeeMetadata* balrajData = array[0]["metaData"] 
NSDate *balrajDOJ = balrajData. joiningDate. 

でもあなたはforループを使用することができます。

NSMuatableArray *arrMutDOJ = [NSMuatableArray new]; 

for (int i = 0; i< array.count; i++){ 
    EmployeeMetadata* metaData = array[0]["metaData"] 
    NSDate *DOJ = balrajData.joiningDate 
    arrMutDOJ.add(DOJ) 
} 

は今arrMutDOJに、あなたは今、すべてのempoylesのDOJを持っていますそれらを昇順に並べ替えることができます。 (お客様の要件に応じて)。

関連する問題