[Objective-c]多次元配列のアクセスの仕方をご教授いただきたく思います
処理文
NSLog(@"%@",[ar objectAtIndex:1]);
※arは多次元配列
コンソールの表示結果
{
item1 ="aaa";
item2 ="bbb";
item3 ="ccc";
}
インターネットでは多次元配列のアクセスの仕方が見当たりませんでした。
この様な表示ではなく、この中のaaa,bbb,cccをそれぞれを明示的に取得する方法は存在しますでしょうか?
よろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
失礼します。
質問者様の仰りたいのは下記のようなことでしょうか。
C++言語で書いた場合
CString ar[][3] = {
{"111","222","333"},
{"aaa","bbb","ccc"},
{"AAA","BBB","CCC"}
};
という配列を表示するのに
printf("%s",ar[1][1]);
//////結果///////
bbb
そうであるとして、回答を進めます。(違う場合はもう少し頑張って説明をしてみてください)
// 配列作成
NSArray *ar = [[NSArray alloc]initWithArray:[NSArray arrayWithObject:@"111",@"222",@"333",nil],[NSArray arrayWithObject:@"aaa",@"bbb",@"ccc",nil],[NSArray arrayWithObject:@"AAA",@"BBB",@"CCC",nil],nil];
NSLog(@"%@",[[ar objectAtIndex:1] objectAtIndex:1]);
ででると思います。(多分(笑))
用は多次元配列なんてクラスは特になく、
配列の要素が配列なだけで、
[ar objectAtIndex:1]
で出てくるものがNSArray型なので、
それに対してもう一回objectAtIndexしたったら
bbb
がでてくるよ見たいな感じですかね。
ちなみに、Objective-cはC言語も使えたりするので
char* ar[][3] = 最初に書いたやつ
で
NSString(@"%s",ar[1][1]);
でも出てくるはずですよ(多分(笑))
そんな感じで頑張ってください。
ご解答ありがとう御座います。
この様な解答を望んでおりました。
ただしobjective-cには
NSString(@"%s",ar[1][1]);
というような記述はつかえませんでした。
No.3
- 回答日時:
> どのような記述が必要なのかという質問です。
それはあなたが考えることであって、私(あるいは回答者全般)が考えることではありません。あなた自身が回答を導きだすために必要な情報を提示してきたつもりですが、まだ足りませんか?不足しているとするなら、「NSArrayは、NSArrayの要素になりうる」という点でしょうか?もっともそれは「NSArrayの要素は、Objective-Cのオブジェクトである」ということから容易に連想されるはずだと思います。
> もし勘違いしていたらご指摘ください。
あなたのなさろうとしている作業が、汎用性があるというのが、あなたの勘違いではないでしょうか?だれでもよくやる作業かというと、そうは思えません。だからネット検索しても見つからないし、CocoaやiOSのフレームワークにもありません。
あなたの意図と合致しているかどうかわかりませんが、イメージとしては表計算の処理に近いことではないかと思い浮かびます。
CSV形式のテキスト(カンマ、改行区切りあるいはスペース、改行区切りのテキスト)の処理には、NSScannerというクラスがあり、XML書類の処理にも、いくつかの専門クラスが用意されています。
No.2
- 回答日時:
> 文字列を配列の要素に入れて、扱いたいと考えています。
べつに「使い方があまりよろしくない」ことはありませんよ。ごくごくふつうの、というか頻繁に行われる処理です。
まず、Objective-Cには「NSString」という、文字列のクラスがあります。このクラスから生成されるのはオブジェクトですから、NSArrayの要素になります。NSStringオブジェクトを、NSArrayオブジェクトに登録して、管理する。とくに注意が必要な処理、操作ではありません。きわめてスタンダードです。
文字列定数は、C言語とObjective-Cは異なります。同じではありません。C言語の文字列定数は、ごぞんじのとおり「"abc"」というように、ダブルクオートで囲みますが、Objective-Cの文字列定数は、ダブルクオートの前に「@」を付加し、C言語の文字列定数と区別します。
@"abc" ← Objective-Cの文字列定数。 "abc" ← C言語の文字列定数。
Objective-Cのプログラミングを実践していると、「@」が多用されることに気づくでしょう。「@interface ~ @end」、「@implementation ~ @end」、「@property」、「@selector」など。この記号は「コンパイラ指示子」と呼び、Objective-C特有の記述であることを、コンパイラに教えているものです。文字列定数につける「@」も、これがObjective-C文字列定数であることを示すコンパイラ指示子です。
C言語の文字列は、基本ASCIIコード(0~127の128文字)ですが、Objective-Cの文字列はユニコードベースになっています。NSStringインスタンスが保持する文字列は、もちろんC言語の文字列ではありません。Objective-C文字列定数からNSStirngインスタンスを生成するには、
NSString *myString = @"My String";
という、かなり手抜きな記述が可能です。(ちゃんと記述しようとすると、「NSString *myString = [[NSString alloc] initWithString: @"My String"];」となります)
C言語文字列からNSStringインスタンスを生成するには、メソッド「initWithCString:encoding:」を使います。
配列の要素となるNSStringが用意できたら、つぎはNSArrayに登録していきます。これで当初の目的が達成されます。
NSArrayには、要素数固定のNSArrayと、可変長のNSMutableArrtay(NSArrayのサブクラス)の2種類があります。NSMutableArrayインスタンスには、随時「addObject:」で要素を追加していけますが、NSArrayインスタンスでは、宣言、初期化時にいっきに要素を代入します。
NSArray *stringArray = [[NSArray alloc] initWithObjects: stringA, stringB, stringC, stringD, nil];
(要素の最後を「nil」で閉じることを忘れずに)
NSStringインスタンスは、やはりここでも手抜きが可能です。
NSArray *stringArray = [[NSArray alloc] initWithObjects: @"あいう", @"えおか", @"きくけ", @"こさし", nil];
NSARRayインスタンスから要素を参照するには、ごぞんじのように「objectAtIndex:」を使います。
この回答への補足
細かくありがとうございます。
私の知識不足なのかイメージが伝わってないのかもしれませんが。
ar(Array型)に
配列|tem1|item2|item3
0 "111","222","333"
1 "aaa","bbb","ccc"
2 "AAA","BBB","CCC"
入っているとして。
NSLog(@"%@",[ar objectAtIndex:1]);
と入力すると
{
item1 ="aaa";
item2 ="bbb";
item3 ="ccc";
}
と出力されます。
そこで出力結果が例えば要素1のitem2の"bbb"の部分だけを取りたい
となった時。
どのような記述が必要なのかという質問です。
もし勘違いしていたらご指摘ください。
No.1
- 回答日時:
Objective-Cは、C言語の配列をそのまま使います。
C言語とは別の配列がある訳ではありません。なので、多次元配列も、C言語のやり方で処理します。Objective-Cのクラスには、コレクションクラスといって、NSArray、NSSet、NSIndexのような配列を扱うように見えるものがありますが、いずれも用途を特化したものです。NSArrayはObjective-Cオブジェクトしか要素にできませんし、NSSetは、そのNSArrayの亜種、NSIndexは、符号なしintのみ要素とし、負数や実数(浮動小数点数)を要素にできません。名前どおり、順番を扱うクラスです。
それとも、文字列を配列の要素に入れて、扱いたいというのが、お望みなのでしょうか?
回答ありがとうございます。
使い方があまりよろしくないかもしれませんが、最後の一文の通り
文字列を配列の要素に入れて、扱いたいと考えています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
AIのプログラムについて教えて...
-
プログラミングの進学について
-
プログラミングについて プログ...
-
Google ColaboでGUI作成
-
vba クリップボードクリアにつ...
-
pythonでAmazonのほしいものリ...
-
https://paiza.jp/challenges/5...
-
以下の技能を無料で受講できる...
-
VBA 電話番号の正規表現について
-
Web初心者です。 簡易的なWebペ...
-
プログラミングを学ぼうと思い...
-
python エラー
-
プログラマーに向いている人の...
-
hostファイル
-
htaccessで特定のディレクトリ...
-
batファイル、コマンドプロンプ...
-
python質問
-
プログラミング言語について
-
CLispのloop内の挙動について
-
ExcelVBAでFormulaR1C1を列範囲...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列の要素番号を取得するには?
-
変な質問ですみません、n番目の...
-
VB.NET の配列の要素数
-
DataGridでCTRLキーを押さずに...
-
IDの自動採番について
-
VB6 複数行のテキストをリスト...
-
Vba 配列の中の特定文字列の位...
-
[Objective-c]多次元配列のアク...
-
重複しない乱数整数を発生させる。
-
VBでボタンを押すと画像をラン...
-
ヒープソートの問題について
-
重複しない乱数を作り配列に入...
-
ランダムに数字を並び変える方法は
-
重複しない乱数の生成
-
画像を横に無限スクロールする件で
-
ActionScriptで配列をクリアす...
-
構造体配列のサイズ
-
簡単な当たり判定作りたい
-
複数の異なる結果を表示するラ...
-
FLASHでXMLを読み込んだときに...
おすすめ情報