Objective-c - Sort some Numbers stored is variables - objective-c

hello
I want to sort(ascending) some numbers stored in different variables(like int a=50,int b=60, etc..)!
How can i do that?
Thanks for any help!

You need to store the numbers in an NSArray, packaged in NSNumbers. Then you can do normal array sorting:
NSArray *array = [NSArray arrayWithObjects:
[NSNumber numberWithInt:a],
[NSNumber numberWithInt:b],
nil
];
NSArray *sorted = [array sortedArrayUsingSelector:#selector(compare:)];

Put them into NSArray or NSMutableArray and sort the array

Related

What does #[] stand for in objective c?

I've come across the #[] in the following context
self.searches = [#[] mutableCopy];
What is it?
self.searches = [[NSArray array] mutableCopy];
It's an array literal. In another words: [NSArray arrayWithObjects:nil] in short form.
You can add objects in it like this
NSArray *array = #[#"one", #"two"];

Releasing NSMutableArray not affecting the count of elements in the array

Could someone explain to me the following result?
//generate an array with 4 objects
NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:
[NSNumber numberWithInt:1],
[NSNumber numberWithInt:2],
[NSNumber numberWithInt:3],
[NSNumber numberWithInt:4],
nil];
//release the array
[array release];
//get a count of the number of elements in the array
int count = [array count]; <--- count returns 4
Should my count not be zero? Does 'release' not remove all elements from the array?
The value of count is undefined, because after the last release accessing properties of the array is illegal: essentially, you are accessing a dangling pointer.
If you would like to clear out the array without invalidating it, use removeAllObjects method.

NSArray or NSMutableArray for NSNumber Listing

Okay, so I want to do something like this:
int array[] = {1, 2, 3, 4, 5};
How would I go about that if I want to use NSArray and NSNumbers instead of ints?
**Note:
I do not want something like
NSMutableArray *array = [[NSMutableArray alloc] init];
[array addObject: ];
I need to be able to put them all in a single set separated by a comma. (Weird but it makes my program easier to handle in that format. I'm mimicking some java code where that is done a lot, so itl make it easier to follow the tutorial.)
If you want to add all the elements at once, and you're not going to change it, then us an NSArray. You can fill it like this:
NSArray *array = [NSArray arrayWithObjects:[NSNumber numberWithInt:1],[NSNumber numberWithInt:2],[NSNumber numberWithInt:3],[NSNumber numberWithInt:4],[NSNumber numberWithInt:5],nil];
NSArray *array = #[#1,#2,#3,#4];
you could either do this
NSArray* array = [[NSArray alloc] initWithObjects:[NSNumber numberWithInt:1],[NSNumber numberWithInt:2],[NSNumber numberWithInt:3],[NSNumber numberWithInt:4], nil];

Add NSStrings to mutable array

I created a mutable array and I have two NSString variables. Now I want to add these two NSStrings to my array. How is this possible? Thanks.
Use the addObject function of you NSMutableArray.
eg.
[myNSMutableArray addObject:myString1];
[myNSMutableArray addObject:myString2];
Jhaliya's answer is correct. +1 vote.
I added a immutable version so you can see the difference. If you dont want to remove or add more objects (NSStrings) to your container, I would recommend using an Immutable version.
Mutable version:
NSMutableArray *mutableArray = [[NSMutableArray alloc] init];
NSString *string_one = #"One"];
[mutableArray addObject:string_one];
//Or
[mutableArray addObject:#"Two"];
NSLog(#"%#", mutableArray);
Immutable version
NSArray *immutableArray = [NSArray arrayWithObjects:#"One", #"Two", nil];
NSLog(#"%#", immutableArray);
You can add at NSMutableArray allocation.
Like :
NSMutableArray *test = [NSMutableArray arrayWithObjects:#"test1",#"test2",nil];

How to declare a two dimensional array of string type in Objective-C?

How do I declare a two dimensional array of string type in Objective-C?
First, you might consider using a class to hold your inner array's strings, or loading it from a plist file (in which it is easy to make an 2d array of strings).
For direct declarations, you have a couple of options. If you want to use an NSArray, you'll have to manually create the structure like this:
NSMutableArray *strings = [NSMutableArray array];
for(int i = 0; i < DESIRED_MAJOR_SIZE; i++)
{
[strings addObject: [NSMutableArray arrayWithObject:#"" count:DESIRED_MINOR_SIZE]];
}
Or, using array literals, you can get an immutable version like this:
NSArray *strings = #[ #[ #"A", #"B", #"C" ], #[ #"D", #"E", #"F" ], #[ #"G", #"H", #"I" ] ]
You can then use it like this:
NSString *s = [[strings objectAtIndex:i] objectAtIndex:j];
This is somewhat awkward to initialize, but it is the way to go if you want to use the NSArray methods.
An alternative is to use C arrays:
NSString *strings[MAJOR_SIZE][MINOR_SIZE] = {0}; // all start as nil
And then use it like this:
NSString *s = strings[i][j];
This is less awkward, but you have to be careful to retain/copy and release values as you put them in to and remove them from the array. (Unless you're using ARC, of course!) NSArray would do this for you but with C-style arrays, you need to do something like this to replace an array:
[strings[i][j] release];
strings[i][j] = [newString retain];
The other difference is that you can put nil in the C-style array, but not the NSArrays - you need to use NSNull for that. Also take a look at Stack Overflow question Cocoa: Memory management with NSString for more about NSString memory management.
If you want to declare and initialize a two-dimensional array of strings, you can do this:
NSArray *myArray = [NSArray arrayWithObjects:
[NSArray arrayWithObjects:#"item 1-1", #"item 1-2", nil],
[NSArray arrayWithObjects:#"item 2-1", #"item 2-2", nil],
[NSArray arrayWithObjects:#"item 3-1", #"item 3-2", nil],
[NSArray arrayWithObjects:#"item 4-1", #"item 4-2", nil],
nil];
This has the benefit of giving you an immutable array.
I might be self-advertising but I wrote a wrapper over NSMutableArray fore easy use as a 2D array. It available on GitHub as CRL2DArray here. https://github.com/tGilani/CRL2DArray