黑马程序员——09-Foundation框架之一

本文详细介绍了Objective-C中的结构体如 NSRange、NSPoint、NSSize、NSRect和字符串类NSString、NSMutableString的基本使用方法,包括如何创建、操作和转换它们,以及结构体转为字符串的方法。

一、结构体

1NSRange

1)、类型定义

typedef struct _NSRange {
    NSUInteger location;
    NSUInteger length;
} NSRange

注:NSUInteger即为unsigned long类型

简单示例:

用NSRange表示字符串@"i love oc"中 love的范围,location = 2 length = 4 

用NSRange表示数组{10,11,12,13,14}12,13,14的范围,location = 2 length = 3

 

2)、建立结构体

NSRange r1 = {2, 4}; 

NSRange r2 = {.location = 2, .length = 4};

以上方法不常用,经常调用函数MakeRange建立结构体

NSMakeRange(NSUInteger loc, NSUInteger len)

例如:

NSRange r3 = NSMakeRange (2, 4);

 

3)、结构体的使用示例

查找字符串lovestr中的范围,如果找不到,length=0location=NSNotFound==-1

NSString *str = @"i love oc";

NSRange range = [str rangeOfString:@"love"];

NSLog(@"loc = %ld, length=%ld", range.location, range.length);

 

2NSPoint/CGPoint

1)、类型定义

typedef CGPoint NSPoint;
struct CGPoint {
    CGFloat x;
    CGFloat y;
};
typedef struct CGPoint CGPoint;

注:

  •  NSPoint即为CGPoint,建议使用CGPoint
  •  CGFloat即为double类型

2)、建立结构体

CGPoint p1 = {10,10};

最常用的还是利用函数建立结构体

NSMakePoint(CGFloat x, CGFloat y)

CGPointMake(CGFloat x, CGFloat y)   // 最常用

示例:

    CGPoint p1 = NSMakePoint(10, 10);

    NSPoint p2 = CGPointMake(20, 20);// 最常用

    

原点表示CGPointZero

CGPointZero == CGPointMake(0, 0)

 

3NSSize/CGSize

1)类型定义

typedef struct _NSSize {
    CGFloat width;
    CGFloat height;
} NSSize;

2)、建立结构体

相关函数

NSMakeSize (CGFloat w, CGFloat h)

CGSizeMake(CGFloat width, CGFloat height)

示例;

NSSize s1 = CGSizeMake(10, 15);

NSSize s2 = NSMakeSize(10, 15);

CGSize s3 = NSMakeSize(10,15);

CGSizeZero == CGSizeMake(0, 0)

 

4NSRect/CGRect

1)类型定义

typedef struct _NSRect {
    NSPoint origin;
    NSSize size;
} NSRect;

2)、建立结构体

相关函数

CGRectMack(CGFloat x, CGFloat y, CGFloat width, CGFloat height)

CGMackRect (CGFloat x, CGFloat y, CGFloat w, GFloat h)

示例:

CGRect r1 = CGRectMake(0, 0, 10,15);

CGRect r2 = { {0, 0}, {10, 15}};

CGRect r3 = {p1, s2};

CGRect r4 = {CGPointZero, CGSizeMake(100, 90)};

CGRectZero

    

5、结构体转为字符串

一般输出结构体的成员变量是逐个输出,如

NSLog(@"x=%f, y=%f, width=%f, height=%f", r1.origin.x, r1.origin.y, r1.size.width, r1.size.height);

这种方法比较麻烦,所以将结构体转为字符串,输出字符串

    NSString *str = NSStringFromPoint(p1);

    NSString *str = NSStringFromSize(s3);

    NSString *str = NSStringFromRect(r1);

    NSLog(@"%@", str);

    

6、结构体常用函数

1CGPointEqualToPoint

比较两个点是否相同

 BOOL b1= CGPointEqualToPoint(CGPointMake(10, 10), CGPointMake(10, 10));

同理还有

 CGRectEqualToRect(CGRect rect1, CGRect rect2)

 CGSizeEqualToSize(CGSize size1, CGSize size2)

 

2CGRectContainsPoint

判断点是否在矩形框中

BOOL b2 = CGRectContainsPoint(CGRectMake(50, 40, 100, 50), CGPointMake(60, 45));

 

注:使用这些CGPointEqualToPointCGRectContainsPointCGPointZero等函数要添加CoreGraphics框架

 

二、字符串

1NSString : 不可变字符串

1)字符串的创建

    NSString *s1 = @"jack";

    NSString *s2 = [[NSString alloc] initWithString:@"jack"];

    NSString *s3 = [[NSString alloc] initWithFormat:@"age is %d", 10];

    

2C/OC字符串转换

C语言字符串转为OC字符串

    NSString *s4 = [[NSString alloc] initWithUTF8String:"jack"];

    OC字符串转为C语言字符串

    const char *cs = [s4 UTF8String];

3)读取文件内容

方法一

NSString *s5 = [[NSString alloc] initWithContentsOfFile:@"/Users/yang/Desktop/1.txt" encoding:NSUTF8StringEncoding error:nil]; 

方法二

NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/yang/Desktop/1.txt"];

NSString *s6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];

补充

NSUTF8StringEncoding :用到中文就可以用这种编码

    URL 表示资源路径,格式:协议头://路径

    协议头包括file://, ftp://

4)字符串的导出

  方法一

    [@"Jack\nJack" writeToFile:@"/Users/yang/Desktop/my.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];

    方法二

    NSURL *url = [NSURL fileURLWithPath:@"/Users/yang/Desktop/my2.txt"];

    [str writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil];

2NSMutableString : 可变字符串,继承自NSString

常见使用示例

  •  创建可变字符串

    NSMutableString *s1 = [NSMutableString stringWithFormat:@"my age is 10"];

  •  拼接内容到s1的后面

    [s1 appendString:@" 11 12"];

  •  删除制定字符串

    NSRange range = [s1 rangeOfString:@"is"]; // 获取is的范围

    [s1 deleteCharactersInRange:range];

  •  对比

    NSString *s2 = [NSString stringWithFormat:@"age is 10"];

    // 拷贝一份s2的内容,并将新内容拼接到后面赋给s3

    NSString *s3 = [s2 stringByAppendingString:@" 11 12"];

      



内容概要:本文聚焦于高维多阶段随机规划问题的建模与求解方法,结合Python代码实现,系统研究了在不确定性环境下的复杂动态优化问题。重点探讨了正则化分解技术在缓解高维问题“维度灾难”中的作用,以及如何引入马尔可夫过程对系统状态转移的不确定性进行建模,从而提升优化模型的鲁棒性与实用性。文中详细阐述了算法设计思路与实现流程,涵盖场景生成、阶段划分、递推求解及收敛性分析等关键环节,适用于能源调度、电力系统规划等具有多阶段决策特征的实际应用场景。; 适合人群:具备一定运筹学基础、随机过程理论知识及Python编程能力,从事能源系统优化、电力调度、智能电网、低碳规划等领域的高校研究生、科研人员以及相关工程技术人员。; 使用场景及目标:①掌握高维多阶段随机规划问题的建模框架与求解策略;②学习如何利用马尔可夫链刻画动态不确定性并嵌入优化模型;③理解正则化方法在降低计算复杂度、加速算法收敛方面的技术优势;④借鉴完整代码实现在自身研究课题中复现或拓展相关算法; 其他说明:资源提供可运行的Python源码,建议结合具体案例数据进行调试与验证,并配合主流优化求解器(如Gurobi、CPLEX)进一步提升求解效率,同时推荐阅读相关文献以深化对分解算法与随机规划理论的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值