关于如何在Objective-C中处理数组,我有点困惑.如果我有一个像这样的数组
NSarray *myArray = [[NSArray alloc]
initWithObjects:@"N", @"N", @"N", @"N", @"N",
nil];
Run Code Online (Sandbox Code Playgroud)
如何将第一次出现更改为"Y"?
我以为我知道如何使用快速枚举,但有一些我不明白的事情.如果我创建三个NSString对象和三个NSNumber对象并将它们放在NSMutableArray:
NSString *str1 = @"str1";
NSString *str2 = @"str2";
NSString *str3 = @"str3";
NSNumber *nb1 = [NSNumber numberWithInt:1];
NSNumber *nb2 = [NSNumber numberWithInt:2];
NSNumber *nb3 = [NSNumber numberWithInt:3];
NSArray *array = [[NSArray alloc] initWithObjects:str1, str2, str3, nb1, nb2, nb3, nil];
Run Code Online (Sandbox Code Playgroud)
然后我对所有NSString对象进行快速枚举,如下所示:
for (NSString *str in array) {
NSLog(@"str : %@", str);
}
Run Code Online (Sandbox Code Playgroud)
在控制台中,我得到了这个结果:
2011-08-02 13:53:12.873 FastEnumeration[14172:b603] str : str1
2011-08-02 13:53:12.874 FastEnumeration[14172:b603] str : str2
2011-08-02 13:53:12.875 FastEnumeration[14172:b603] str : str3
2011-08-02 …Run Code Online (Sandbox Code Playgroud) 我有一个NSArray,我想找到一个元素的最后一个出现.例如:
[apple, oranges, pears, apple, bananas];
int i = lastIndexOf("apple");
out: i == 3;
Run Code Online (Sandbox Code Playgroud)
我很难找到一个看APIS的简单解决方案,但是没有例子,所以很难理解我应该使用哪个函数.
我制作了一个数组和一本字典.现在我想把字典的值放到数组中..我对目标C很新,所以请帮助."viewcontroller .m"
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
marray = [[NSMutableArray alloc]initWithObjects:@"1",@"2",@"3",@"4", nil];
marray = [[NSMutableArray alloc]initWithObjects:@"6",@"7",@"8",@"9",@"10", nil];
[self displayarray];
[marray release];
mDictionary = [[NSMutableDictionary alloc]init];
[mDictionary setValue:@"sdfsdhfg" forKey:@"firstname"];
[mDictionary setValue:@"kvxv" forKey:@"lastname"];
[self displaydict];
[mDictionary release];
}
-(void)displaydict{
CFShow(mDictionary);
}
-(void)displayarray{
for (int i = 0; i<[marray count]; i++) {
NSLog(@"the array data present at %d index is %@",i,[marray objectAtIndex:i]);
}
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
@end
Run Code Online (Sandbox Code Playgroud) 我从2个不同的共享Google日历中检索了数据,并将数据存储在一个数组中.我需要将数据排序为按日期排序的分段UITableView.
继承我的代码:
CalendarModel.h
#import "JSONModel.h"
#import "Time.h"
@interface CalendarModel : JSONModel
@property (strong, nonatomic) NSString* title;
@property (strong, nonatomic) NSArray<Time>* time;
@end
Run Code Online (Sandbox Code Playgroud)
CalendarModel.m
#import "CalendarModel.h"
@implementation CalendarModel
+(JSONKeyMapper*)keyMapper
{
return [[JSONKeyMapper alloc] initWithDictionary:@{
@"gd$when": @"time",
@"title.$t": @"title",
}];
}
@end
Run Code Online (Sandbox Code Playgroud)
time.h中
#import "JSONModel.h"
@protocol Time @end
@interface Time : JSONModel
@property (strong, nonatomic) NSString* startTime;
@property (strong, nonatomic) NSString* endTime;
@end
Run Code Online (Sandbox Code Playgroud)
Time.m什么都不做,因为它是由JSONModel处理的
SportsViewController.m
#import "SportsViewController.h"
#import "JSONModelLib.h"
#import "CalendarModel.h"
#import "Time.h"
#import "JSONValueTransformer.h"
@interface SportsViewController ()
@property (strong, nonatomic) NSMutableArray …Run Code Online (Sandbox Code Playgroud) 在询问这个问题之前,我已经阅读了很多SO帖子,我猜这个答案就在那里,但我没有看到.我是Objective-C的新手,我正试图做一个(看似)简单的动作,我无法弄明白.
一般的想法是我有一个NSArray充满对象(特别是类型UIImageView).我想要复制那个数组,我已经做了很多种方式(都成功了).
复制后,我现在有两个数组.我想修改一个对象,比如索引2,只在副本中修改.
到目前为止似乎,因为副本只是复制引用(或指针),更改索引2处的对象将在副本和原始文件中更改它.
那有意义吗?
NSArray *originalArray = @[object1, object2];
Run Code Online (Sandbox Code Playgroud)
我尝试复制这个数组的方式,以便我可以实现我想要的:
NSMutableArray *originalArrayCopy = [NSMutableArray arrayWithArray:originalArray];
NSArray *originalArrayCopy = [originalArray copy];
NSMutableArray *originalArrayCopy = [[NSMutableArray alloc] initWithArray:originalArray];
Run Code Online (Sandbox Code Playgroud)
并且似乎在每种情况下,从副本修改对象也会在原始对象中修改它.
注意:虽然NSArray显然是不可变的,但我原始数组中的对象是可变的.
我有以下NSArray:
NSArray myArray = @[@{@300:@"5 min"},
@{@900:@"15 min"},
@{@1800:@"30 min"},
@{@3600:@"1 hour"}];
Run Code Online (Sandbox Code Playgroud)
我想要我的词典的价值列表:
@[@"5 min",@"15 min",@"30 min",@"1 hour"]
Run Code Online (Sandbox Code Playgroud)
我的词典的关键列表:
@[@300, @900, @1800, @3600]
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么?我在考虑谓词,但我不知道如何使用它?
BKObject 是一个自定义对象,我想将多个 BKObject 放入一个数组中。
BK视图控制器:
#import <UIKit/UIKit.h>
#import "BKObject.h"
@interface BKViewController : UIViewController
@property (strong, nonatomic) NSArray *data;
@property (weak, nonatomic) BKObject *tmpObject;
@end
Run Code Online (Sandbox Code Playgroud)
BKViewController.m:
#import "BKViewController.h"
@implementation BKViewController
- (void)viewDidLoad
{
[super viewDidLoad];
NSMutableArray *arr = [[NSMutableArray alloc] init];
for(NSInteger i = 0; i < 100000; i++){
[arr addObject:[[BKObject alloc] initWithName:@""]];
}
self.data = [NSArray arrayWithArray:arr];
__weak BKObject *weakMutableObject = arr[0];
[arr removeAllObjects];
NSLog(@"%@", weakMutableObject); // print out the object, why?
__weak BKObject *weakObject = self.data[0];
self.data = nil; …Run Code Online (Sandbox Code Playgroud) 我想知道为什么通过NSArray迭代比通过NSSet迭代更快?我想象它与NSArray的订购事实有关,而NSSet不是,但我是一个经过认证的答案,而不仅仅是猜测.
编辑:
我的问题是:为什么它更快,没有在该主题中解释.而不是它更快.
我有一组模型,它有 2 个属性:
1.标题 (字符串)
2. isSelected(布尔)
我想根据isSelected属性对它们进行排序,使其相对于源数组的序列进行排序。例如,如果全部为 FALSE 或 TRUE,则排序后应该有相同的输出。
但如果我使用以下方法,它会在基于 BOOL 属性对它们进行排序后更改原始排序。
someArray = array.sort { $0.selected && !$1.selected }
Run Code Online (Sandbox Code Playgroud)
我应该怎么做才能保留原来的顺序?
编辑1
title图片中未显示排序顺序。可能服务器向我发送了 4 个标题为 Z、Y、P、A 的对象。因此,如果全部都是假的,一旦我排序,它应该像 Z 假,Y 假,P 假,A 假。
nsarray ×10
objective-c ×9
ios ×3
nsdictionary ×2
arrays ×1
find ×1
json ×1
memory-leaks ×1
nspredicate ×1
nsset ×1
sorting ×1
swift ×1
uitableview ×1
xcode ×1