生成 NSArray 元素的排列
假设我有一个 NSNumbers 的 NSArray,如下所示: 1, 2, 3
那么所有可能的排列的集合将如下所示:
1,2,3
1,3,2
2,1,3
2、3、1
3,1,2
3,2,1
在 Objective-c 中执行此操作的好方法是什么?
Let's say I have an NSArray of NSNumbers like this: 1, 2, 3
Then the set of all possible permutations would look something like this:
1, 2, 3
1, 3, 2
2, 1, 3
2, 3, 1
3, 1, 2
3, 2, 1
What's a good way to do this in objective-c?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
我已经使用了上面 Wevah 的答案中的代码,并发现了一些问题,所以在这里我进行了更改以使其正常工作:
NSArray+Permutation.h
NSArray+Permutation.m
I have used the code from Wevah's answer above and discovered some problems with it so here my changes to get it to work properly:
NSArray+Permutation.h
NSArray+Permutation.m
可能有更好的方法来做到这一点(就地或其他方式),但这似乎有效:
Header:
Implemetation:
要使用它,只需
#import
头文件,然后调用[yourArray allPermutations]
;该方法将返回一个包含每个排列数组的数组。[代码改编自 PHP 代码此处。]
There might be a better way to do this (in-place, or something), but this seems to work:
Header:
Implemetation:
To use it, simply
#import
the header file, and call[yourArray allPermutations]
; the method will return an array containing arrays for each permutation.[Code adapted from PHP code here.]
您可以将
NSString *characters
更改为id Something
并将其用于任何类型的对象You can change
NSString *characters
toid something
and use it for any type of object我最近偶然发现了同样的问题,并编写了一个我认为更具可读性的递归解决方案。它依赖于此处所述的核心原理。我将其包含在这里,以防它对某人有帮助:
示例调用:
结果:
I recently stumbled upon the same problem, and wrote a recursive solution that I believe is more readable. It relies on the core principal that is noted here. I'm including it here in case it will help someone:
Sample call:
Result:
扩展 SSJ 的答案 -
为了清晰
起见,打印日志 - 适用于任何对象
- 更多解释 -
边缘情况
涵盖错误可能导致输入 @[@1,@2,@3] 的日志输出的
Expanded SSJ's answer to
-log prints for clarity
-work with any object
-more explanations
-cover edge cases where error can result
log output for input @[@1,@2,@3]