- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 Cocoa 项目中有一组对象。如果对象有一个属性与传入的值相匹配,那么该对象应该保存到一个新的数组中,该数组就是该方法的返回值。这看起来很简单,但我看到了一些奇怪的行为。方法如下:
- (NSMutableArray*)tagAttributeRectsForID:(NSString*)nodeID
{
NSMutableArray * resultArray = [NSMutableArray array];
for (NSDictionary * line in self.lineInfoForTap) {
NSMutableArray * glyphRects = [line valueForKey:@"GlyphRects"];
for (NSDictionary * rectDict in glyphRects) {
if ([rectDict valueForKey:nodeID]) {
CGRect thisRect = CGRectFromString([rectDict valueForKey:nodeID]);
if (thisRect.size.width > 0) {
[resultArray addObject:NSStringFromCGRect(thisRect)];
}
}
}
glyphRects = nil;
}
return resultArray;
}
发生的情况是,根据导致一组匹配的行对象的数量,这就是我在返回数组中获得完整结果集的次数。换句话说,我希望样本结果如下所示:
2013-04-16 19:38:37.665 Vorpal[18523:c07] (
"{{0, 486.5}, {38.44, 13.5}}",
"{{100, 486.5}, {27.12, 13.5}}",
"{{140, 483.34}, {86.54, 16.66}}",
"{{0, 508.86}, {58.62, 14.14}}"
)
但我得到的是这个:
2013-04-16 19:38:37.665 Vorpal[18523:c07] (
"{{0, 486.5}, {38.44, 13.5}}",
"{{100, 486.5}, {27.12, 13.5}}",
"{{140, 483.34}, {86.54, 16.66}}",
"{{0, 508.86}, {58.62, 14.14}}",
"{{0, 486.5}, {38.44, 13.5}}",
"{{100, 486.5}, {27.12, 13.5}}",
"{{140, 483.34}, {86.54, 16.66}}",
"{{0, 508.86}, {58.62, 14.14}}"
)
如果有三行匹配结果,我将返回三组数据。
我忍不住认为我错过了一些关于我编写此方法的方式的非常基本的东西,但经过几个小时的盯着它后,我准备认输并询问 friend 。你是那个 friend ,匿名的SO读者吗?我可以借用一个 friend 。 :-(
最佳答案
如果您的结果有重复项(确实如此),那么我们应该推断您的源数据有重复项。您可以使用 NSSet 来过滤重复项。
如果您愿意的话,您可以大幅压缩此代码。那么您就不需要显式创建集合。
首先在 NSString 上创建一个类别:
@interface NSString (ValidStringRect)
- (BOOL)validRect { return CGRectFromString(self).size.width > 0; }
@end
然后将您的方法替换为:
- (NSMutableArray*)tagAttributeRectsForID:(NSString*)nodeID
{
NSPredicate *pred = [NSPredicate predicateWithFormat:@"validRect = YES"];
// I might have the @distinctUnionOfArrays operator at the wrong point in the keypath
id array = [self valueForKeyPath:[NSString stringWithFormat:@"lineInfoForTap.GlyphRects.@distinctUnionOfArrays.%@", nodeID]];
return [[array filteredArrayUsingPredicate:pred] mutableCopy];
}
键“@distinctUnionOfArrays”是一个数组运算符,没有它您将拥有一个数组的数组。请参阅https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/KeyValueCoding/Articles/CollectionOperators.html了解更多信息。
关于ios - 从 NSArray 收集数据,具有难以解释的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16049179/
我想模拟这个函数: function getMetaData(key) { var deferred = $q.defer(); var s3 = vm.ini
我是一名优秀的程序员,十分优秀!