数组操作之遍历,排序,逆序

数组遍历:

索引遍历

枚举遍历:

  1. NSEnumerator* enumerator = [array objectEnumerator];
  2. id e = nil;
  3. while (e = [enumerator nextObject])
  4. {
  5. NSLog(@"e = %@", e);
  6. }

代码块遍历:

  1. // 示例1:枚举遍历
  2. [array enumerateObjectsUsingBlock:^ (id obj, NSUInteger idx, BOOLBOOL *stop){
  3. NSLog(@"obj = %@", obj);
  4. }];
  5. // 示例2:枚举遍历,遇到符合条件的元素(obj=array[idx])即退出遍历。
  6. [array enumerateObjectsUsingBlock:^ (id obj, NSUInteger idx, BOOLBOOL *stop){
  7. if ([obj isEqualToString:@"e3"]) {
  8. *stop = YES; // 中止遍历, break
  9. } else {
  10. *stop = NO; // 继续遍历,continue
  11. }
  12. }];

数组排序:

循环排序

代码块排序:

NSArray *array = @[@12,@23,@8];

NSComparator sortBlock = ^(id string1,id string2){

//            return [string1 compare:string2];

if ([string1 floatValue]<[string2 floatValue]) {

return NSOrderedAscending;

}else if ([string1 floatValue]==[string2 floatValue]){

return NSOrderedSame;

}else{

return NSOrderedDescending;

}

};

NSArray *sortArray = [array sortedArrayUsingComparator:sortBlock];

NSLog(@"%@",sortArray);

}

数组逆序:

遍历逆序

方法逆序:

[[array reverseObjectEnumerator] allObjects];

时间: 2024-08-04 14:05:08

数组操作之遍历,排序,逆序的相关文章

C语言实现单链表的遍历,逆序,插入,删除

单链表的遍历,逆序,插入,删除 #include<stdio.h> #include<stdlib.h> #include <string.h> #define bzero(a, b) memset(a, 0, b)//windows平台下无bzero函数. 增加宏拓展移植性 struct node { int data; //有效数据 struct node *pNext;//指向下一个节点的指针 }; struct node * make_node(int data

POJ 2299 Ultra-QuickSort (树状数组or 归并排序分治求逆序对数)

题目大意就是说帮你给一些(n个)乱序的数,让你求冒泡排序需要交换数的次数(n<=500000) 显然不能直接模拟冒泡排序,其实交换的次数就是序列的逆序对数. 由于数据范围是 0 ≤ a[i] ≤ 999,999,999所以先要离散化,然后用合适的数据结果求出逆序 可以用线段树一步一步添加a[i],每添加前查询前面添加比它的大的有多少个就可以了. 也可用树状数组,由于树状数组求的是(1...x)的数量和所以每次添加前查询i-sum(a[i])即可 树状数组: //5620K 688MS #incl

hdu 4857 逃生(拓扑排序逆序 + 优先队列)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4857 题意:有编号 1 - n 的 n 个人逃生,编号越小的人越有钱, 在满足 m 个前提的条件下要尽可能早的逃脱 .m个前提,对于每个前提 a , b,代表 a 要早于 b逃脱. 思路: (1)这题可以理解为有钱的人优先级越高,所以可以用优先队列. (2)但是要注意这道题和字典序升序的区别. eg:5 1 5 1 按照字典序的答案:2 3 4 5 1,    本题答案: 5 1 2 3 4. 因为

数据结构之 线性表---单链表的操作B(先逆序+再删除重复元素)

数据结构上机测试2-2:单链表操作B Time Limit: 1000MS Memory limit: 65536K 题目描述 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除(值相同的元素只保留最后输入的一个). 输入 第一行输入元素个数n: 第二行输入n个整数. 输出 第一行输出初始链表元素个数: 第二行输出按照逆位序所建立的初始链表: 第三行输出删除重复元素后的单链表元素个数: 第四行输出删除重复元素后的单链表. 示例输入 10 21 30 14 55 32 63

c++数组操作(重复,排序,bitset)

//问题: //给你一个数组,a[]={1,1,1,1,1,2,2,2,2,3,3,3,4,5,6} //要输出的结果是1,2,3,4,5,6.(去除重复的数字,要求时间空间的考虑). #include <iostream> using namespace std; template<int _N> class Bitset { public: Bitset() { _Tidy();//调用_Tidy()函数会初始化所有位为0. } void Show()//显示01位. { fo

java 将一个数组中的值按逆序重新存放,例如,原来顺序为:9,5,7,4,8,要求改为:8,4,7, 5,9。

1 public class Test3 { 2 3 public static void main(String[] args) { 4 5 int[] grade = {87,88,89,98,78}; 6 7 int m; 8 for(int i = 0; i < 2; i++){ 9 10 m = grade[i]; 11 grade[i] = grade[5-i-1]; 12 grade[5-i-1] = m; 13 14 } 15 for(int j =0; j < 5; j++)

输入一列数组,输出它的逆序数组

#include <iostream> using namespace std; int main( ) { int a[10]; for (int i=0; i<10; i++) { cin>>a[i]; } for(int m=9; m>=0; m--) cout<<a[m]<<" "; return 0; } }

hdu 2419 逆序操作+并查集

此题关键在于维护点的连通性以及连通块的信息,容易想到并查集,但是并查集却不支持删边操作,于是考虑逆序处理,这样删边就变成了加边操作,每一个连通块的信息可以用stl中的multiset来维护,注意集合合并的时候要启发式合并(这里是按照集合的大小来合并,每次小的集合合并到大的集合里),不然会超时. 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <set> 5 u

1-6-04:数组逆序重放

描述 将一个数组中的值按逆序重新存放.例如,原来的顺序为8,6,5,4,1.要求改为1,4,5,6,8. 输入 输入为两行:第一行数组中元素的个数n(1<n<100),第二行是n个整数,每两个整数之间用空格分隔. 输出 输出为一行:输出逆序后数组的整数,每两个整数之间用空格分隔. 样例输入 5 8 6 5 4 1 样例输出 1 4 5 6 8 1 #include<stdio.h> 2 int main() 3 { 4 int a[101]={0}; 5 int n; 6 scan