你能快速列举一个NSIndexSet
吗?如果没有,枚举集合中项目的最佳方法是什么?
问问题
17896 次
6 回答
146
在 OS X 10.6+ 和 iOS SDK 4.0+ 中,您可以使用以下-enumerateIndexesUsingBlock:
消息:
NSIndexSet *idxSet = ...
[idxSet enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) {
//... do something with idx
// *stop = YES; to stop iteration early
}];
于 2010-11-17T21:20:53.830 回答
22
一个while循环应该可以解决问题。使用前一个索引后,它会增加索引。
/*int (as commented, unreliable across different platforms)*/
NSUInteger currentIndex = [someIndexSet firstIndex];
while (currentIndex != NSNotFound)
{
//use the currentIndex
//increment
currentIndex = [someIndexSet indexGreaterThanIndex: currentIndex];
}
于 2010-11-17T20:54:10.773 回答
20
快速枚举必须产生对象;由于 NSIndexSet 包含标量数字(NSUInteger
s),而不是对象,不,您不能快速枚举索引集。
假设它可以将它们打包成 NSNumbers,但它不会很快。
于 2010-11-19T05:49:02.523 回答
10
简短的回答:没有。 NSIndexSet
不符合<NSFastEnumeration>
协议。
于 2010-11-17T21:22:46.273 回答
2
假设您有一个NSTableView
实例(我们称之为*tableView
),您可以从数据源中删除多个选定的行(嗯.. *myMutableArrayDataSource
),使用:
[myMutableArrayDataSource removeObjectsAtIndexes:[tableView selectedRowIndexes]];
[tableView selectedRowIndexes]
返回一个NSIndexSet
. 无需开始枚举您NSIndexSet
自己的索引。
于 2013-12-05T12:53:58.420 回答
1
这些答案对于Swift 5中的 IndexSet 不再适用。你可以完美地得到类似的东西:
let selectedRows:IndexSet = table.selectedRowIndexes
然后像这样枚举索引:
for index in selectedRows {
// your code here.
}
于 2019-07-08T22:08:16.967 回答