回答
你可以使用:
NSSet* mySetWithUniqueItems= [NSSet setWithArray: yourArray];
這應該不管你的數組中的對象類型的工作,並將填充的NSSet只有一個occurence您的陣列中的任何重複的對象。
我希望這會有所幫助。
更新: 接下來最好的事情是:首先使用類名和對象屬性的連接,然後使用上面的方法。
self.concatenatedArray=[NSMutableArray arrayWithCapacity:4];
for (TheClass* object in self.myArray)
[self.concatenatedArray addObject:[NSString stringWithFormat:@"%@-%@",[object class], object.theProperty]];
self.mySet=[NSSet setWithArray:self.concatenatedArray];
我不知道你會用什麼的NSSet輸出,但你也許可以修改拼接元素,有你在的NSSet輸出所需要的信息。
我想根據獨特的屬性值得到一組相同的對象類型。 – jarryd 2013-03-07 03:25:46
這是什麼意思? – 2013-03-07 03:29:54
@ReyGonzales,我相信這裏的複雜性在於上面的方法將創建一個NSSet,其中包含來自該數組的唯一對象。氦氣正在尋求用對象級別相似的對象填充NSSet,但每個對象具有不同的屬性。 – Spectravideo328 2013-03-07 03:33:31
NSMutableSet* classes = [[NSMutableSet alloc] init];
NSMutableSet* actualSet = [[NSMutableSet alloc] init];
for(id object in array) {
if([classes containsObject:[object class]] == NO) {
[classes addObject:[object class]];
[actualSet addObject:object];
}
}
NSSet *distinctSet = [NSSet setWithArray:[array valueForKeyPath:@"@distinctUnionOfObjects.property"]];
字典本質上具有這個功能了。它的按鍵是一組,這樣你就可以創建字典什麼屬性,你有興趣持有的對象,通過鍵入:
[NSDictionary dictionaryWithObjects:arrayOfObjects
forKeys:[arrayOfObjects valueForKey:theAttribute]];
如果你問的是字典allValues
現在,你必須爲每個只有一個對象屬性。我應該提到,通過這個程序,後面的對象將會被保留在更早的時候。如果原始數組的順序很重要,請在創建字典之前進行反轉。
你不能真正把這些對象爲NSSet
,因爲NSSet
將使用對象的isEqual:
和hash
方法,以確定它們是否應該成員,而不是關鍵屬性(當然,你可以重寫這些方法如果這是你自己的班級,但這可能會干擾他們在其他收藏中的行爲)。
如果你真的覺得你需要一套,你將不得不編寫自己的課程。您可以繼承NSSet
,但傳統觀點認爲Cocoa集合的構成比子類化要容易得多。從本質上講,你寫的覆蓋你感興趣的任何一組方法的類下面是一個(相當不完整的,沒有經過測試的)草圖:
@interface KeyedMutableSet : NSObject
/* This selector is performed on any object which is added to the set.
* If the result already exists, then the object is not added.
*/
@property (assign, nonatomic) SEL keySEL;
- (id)initWithKeySEL:(SEL)keySEL;
- (id)initWithArray:(NSArray *)initArray usingKeySEL:(SEL)keySEL;
- (void)addObject:(id)obj;
- (NSArray *)allObjects;
- (NSArray *)allKeys;
- (BOOL)containsObject:(id)obj;
- (NSUInteger)count;
-(void)enumerateObjectsUsingBlock:(void (^)(id, BOOL *))block;
// And so on...
@end
#import "KeyedMutableSet.h"
@implementation KeyedMutableSet
{
NSMutableArray * _objects;
NSMutableSet * _keys;
}
- (id)initWithKeySEL:(SEL)keySEL
{
return [self initWithArray:nil usingKeySEL:keySEL];
}
- (id)initWithArray:(NSArray *)initArray usingKeySEL:(SEL)keySEL
{
self = [super init];
if(!self) return nil;
_keySEL = keySEL;
_objects = [NSMutableArray array];
_keys = [NSMutableSet set];
for(id obj in initArray){
[self addObject:obj];
}
return self;
}
- (void)addObject:(id)obj
{
id objKey = [obj performSelector:[self keySEL]];
if(![keys containsObject:objKey]){
[_keys addObject:objKey];
[_objects addObject:obj];
}
}
- (NSArray *)allObjects
{
return _objects;
}
- (NSArray *)allKeys
{
return [_keys allObjects];
}
- (BOOL)containsObject:(id)obj
{
return [_keys containsObject:[obj performSelector:[self keySEL]]];
}
- (NSUInteger)count
{
return [_objects count];
}
- (NSString *)description
{
return [_objects description];
}
-(void)enumerateObjectsUsingBlock:(void (^)(id, BOOL *))block
{
for(id obj in _objects){
BOOL stop = NO;
block(obj, &stop);
if(stop) break;
}
}
@end
我創建了一個簡單的庫,稱爲Linq to ObjectiveC ,這是使這類問題更容易解決的一系列方法。在你的情況,你需要的Linq-to-ObjectiveC distinct方法:
NSSet* dictionary = [NSSet setWithArray:[sourceArray distinct:^id(id item) {
return [item type] ;
}]];
這將返回一組,其中每個項目具有鮮明的type
屬性。
- 1. XSL根據屬性創建文件夾
- 2. 從NSArray獲取單個屬性的NSArray
- 3. 從plist創建NSArray
- 4. 把從NSArray的項目的NSSet爲NSManagedObject
- 5. 根據條件從列表中創建數組屬性值
- 6. NSSet中屬性的總和
- 7. 根據屬性
- 8. 如何根據XML屬性創建數據模板?
- 9. 從plist數組創建NSArray
- 10. NSSring從plist創建NSArray
- 11. 創建的NSArray從宏觀
- 12. 創建實例從屬性
- 13. 如何根據igraph中的頂點「鄰居」屬性創建頂點屬性?
- 14. 如何根據實體屬性的值創建嵌入表單
- 15. jQuery - 根據屬性值創建元素組
- 16. 如何根據屬性爲FluentNHibernate創建AutoMap功能?
- 17. 如何根據元素或屬性創建對象
- 18. 根據屬性值創建動態Linq查詢
- 19. 獲取核心數據屬性的NSArray
- 20. 根據從XML刪除的屬性
- 21. 訪問NSSet中對象的屬性
- 22. NSFetchedRequestController的NSSet屬性爲sectionNameKeyPath。可能嗎?
- 23. 類屬性vs NSArray/NSDictionary
- 24. 如何根據對象的scrollHeight和height屬性創建div的可見性?
- 25. 創建ListBoxItem屬性
- 26. 創建新屬性
- 27. 根據特定屬性
- 28. 的Rails根據屬性值
- 29. 從2D創建一個C數組NSArray
- 30. 從NSArray與分頁創建多個UIButtons
你只想要每種類型的第一個實例嗎?或者一個任意的實例?這不是一個真正的從數組到映射的明顯映射。 – 2013-03-07 02:57:02
遍歷數組並將這些對象添加到NSMutableSet中。 – ZhangChn 2013-03-07 02:59:51
'type'的類型是什麼?它是一個字符串,一個數字還是一個對象? – CodaFi 2013-03-07 03:27:06