字符串之间比较大小(可转化为对象)

Student *stu1=[[Student alloc] init];

        stu1.name=@"xiaolongxia";

        stu1.age=18;

        Student *stu2=[Student new];

        stu2.name=@"dazhaxie";

        stu2.age=23;

        NSMutableArray *mularr=[NSMutableArray arrayWithObjects:stu1,stu2, nil];

        

        //第一种比较

        [mularr sortUsingSelector:@selector(compareWithName:)];

        for (int i=0; i<mularr.count; i++) {

            NSLog(@"%@",mularr[i]);

        }

        [mularr sortUsingSelector:@selector(compareWithAge:)];

        for (int i=0; i<mularr.count; i++) {

            NSLog(@"%@",mularr[i]);

        }

        

        //第二种

        [mularr sortUsingComparator:^NSComparisonResult(Student *obj1, Student *obj2) {

            return  [obj1 compareWithName:obj2];

        }];

        for (id obj in mularr) {

            NSLog(@"%@",obj);

        }

        [mularr sortUsingComparator:^NSComparisonResult(Student *obj1, Student *obj2) {

            int result;

            if (obj1.age>obj2.age) {

                result=NSOrderedDescending;

            }else if(obj1.age<obj2.age){

                result=NSOrderedAscending;

            }else {

                result=NSOrderedSame;

            }

            return result;

        }];

        for (id obj in mularr) {

            NSLog(@"%@",obj);

        }

        

        //第三种

        NSSortDescriptor *desc=[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];

        [mularr sortUsingDescriptors:@[desc]];

        NSEnumerator *e=[mularr objectEnumerator];

        NSLog(@"%@",[e allObjects]);

        

        NSSortDescriptor *desc1=[NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES];

        [mularr sortUsingDescriptors:@[desc1]];

        NSEnumerator *ee=[mularr objectEnumerator];

        NSLog(@"%@",[ee allObjects]);

        


### 如何将 C 对象转换为字符串 在C语言中,通常所说的“对象”可以指结构体、联合体或其他复杂的数据类型。要将这些复杂的对象转换为字符串,一般有两种常见方法: #### 方法一:手动拼接字符串 对于简单的结构体或自定义类型的对象,可以通过逐字段读取其成员变量,并将其值通过`sprintf`函数或者其他方式组合成一个表示该对象状态的字符串。 ```c #include <stdio.h> #include <string.h> typedef struct { int id; char name[50]; } Person; void person_to_string(Person p, char *buffer) { snprintf(buffer, sizeof(buffer), "Person{id=%d,name='%s'}", p.id, p.name); } int main() { Person john = {1, "John Doe"}; char buffer[256]; person_to_string(john, buffer); printf("%s\n", buffer); // 输出: Person{id=1,name='John Doe'} return 0; } ``` 这种方法适用于简单场景下的调试输出或是日志记录等功能,在此过程中需要注意缓冲区大小以防止溢出[^1]。 #### 方法二:使用序列化库处理JSON等格式 当涉及到更复杂的数据交换需求时,则可能需要用到专门用于序列化的第三方库来帮助完成这一过程。例如,如果希望把C的对象转化为JSON格式的字符串以便于网络传输或者存储到文件中去的话,就可以考虑采用像[cJSON](https://github.com/DaveGamble/cJSON)这样的开源项目来进行操作。 这里给出一段利用 cJSON 库实现的例子: ```c #include <stdio.h> #include "cjson/cJSON.h" // 定义一个简单的结构体作为例子 typedef struct { const char* key; double value; } DataPoint; char* data_point_to_json(DataPoint dp){ cJSON *root = NULL; root=cJSON_CreateObject(); cJSON_AddStringToObject(root,"key",dp.key); cJSON_AddNumberToObject(root,"value",dp.value); char *out=cJSON_PrintUnformatted(root); cJSON_Delete(root); return out; } int main(){ DataPoint sample={"temperature",78.9}; char *result=data_point_to_json(sample); puts(result); free(result); // 记得释放分配给 JSON 字符串的空间 return 0; } ``` 上述代码展示了如何创建一个包含键值对形式数据点的 JSON 表达式,并最终得到对应的字符串表示形式。注意这里的 `data_point_to_json()` 函数返回的是动态分配内存后的字符数组地址,因此使用者应当记得适时地调用 `free()` 来回收这部分资源以免造成泄漏[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值