[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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- その他(プログラミング・Web制作) FORTRAN77の配列(除算) 2 2023/02/01 14:34
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Perl perlで2次元配列をサブルーチンに値渡しで渡す 5 2022/12/17 18:49
- PHP アコーディオンPHPが上手くいかない 3 2022/07/15 16:29
- その他(データベース) カラム上の重複を削除するクエリを教えてください 3 2022/04/12 14:11
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
小学1年生の子です。塾に行かせ...
-
楽しくて最高のプログラミング...
-
ラズパイpico PIOモード
-
Pythonでgif画像が上手く作れない
-
pythonで複数画像からgifを作る...
-
プログラミング
-
vba クリップボードクリアにつ...
-
RTKPOSTのファイル生成について
-
プログラミング ソースコード
-
正規表現で複数マッチ条件で悩...
-
windowsでテキストファイルの各...
-
スカラーのベクトル微分
-
Pythonって何を意識した言語な...
-
Selenium4でボタンをクリックで...
-
ExcelVBAでFormulaR1C1を列範囲...
-
HTMLソースが表示のページのも...
-
シェルのSTEP数について教えて...
-
Google ColaboでGUI作成
-
ものづくりに向いているプログ...
-
https://paiza.jp/challenges/5...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NET の配列の要素数
-
変な質問ですみません、n番目の...
-
配列の要素番号を取得するには?
-
VBでボタンを押すと画像をラン...
-
Vba 配列の中の特定文字列の位...
-
DataGridでCTRLキーを押さずに...
-
IDの自動採番について
-
複数の変数宣言を、for文で一気...
-
VB6 複数行のテキストをリスト...
-
重複しない乱数の生成
-
重複しない乱数整数を発生させる。
-
C言語のsizeof(サイズオブ)演算...
-
入れ替える処理
-
絵を描き、その都度のxy座標を...
-
正規表現でタグの中身を抜き取...
-
2次元配列 ソート
-
Action Script 2.0 配列の比較
-
画像をランダムに表示するには
-
ランダムに数字を並び変える方法は
-
景品パネルの作り方
おすすめ情報