プロが教えるわが家の防犯対策術!

一次元配列のList型のIndesOfは取れるのですが、
二次元配列になるとエラーになってしまいます。

//一次元配列はOK
List<string> test1 = new List<string>();
int indx1 = test1.IndexOf("chk");


// 二次元配列は"chk"がエラーとなりNG
List<List<string>> test2 = new List<List<string>>();
int indx2 = test2.IndexOf("chk");


二次元配列のList型ではインデックスを取得できないのでしょうか?
取得できるのであれば方法を教えて頂けると助かります。


よろしくお願い致します。

質問者からの補足コメント

  • 回答ありがとうございます。


    回答を待っている間に色々試したところ下記のコードでエラーは無くなりました。

    int indx2 = test2[0].IndexOf("chk");

    この書き方だと一行目を指定しなくてはならないので、
    配列の行数がわからない場合は、行数を調べてからループするという手順になります。

    一度でで何行目の何列目というインデックスは取得できないのでしょうか?

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/11/21 10:19

A 回答 (3件)

以下は、LINQでやる場合。


カウント変数なんてのも作る必要がないから楽ですね。
ちょっとこれ以上の書き方は思いつきません。

using System.Linq;が必要です。

static void Main(string[] args)
{
List<List<string>> test2 = new List<List<string>>();
test2.Add(new List<string>() { "abc" });
test2.Add(new List<string>() { "chk" });
test2.Add(new List<string>() { "def" });
test2.Add(new List<string>() { "ghi", "chk" });

foreach (var item in test2.Select((value, index) => new { value, index }))
{
foreach (var childItem in item.value.Select((value, index) => new { value, index })
.Where(childItem => childItem.value.IndexOf("chk") >= 0))
{
Console.WriteLine(string.Format("index1:{0}, index2:{1}", item.index, childItem.index));
}
}

Console.Read();

}
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

C#を始めたばかりで理解が足らず、一行で取得できるものがあると思っていました。
ご教授頂いた方法を解読してプログラムに組み込みたいと思います。

丁寧な説明ありがとうございました。

お礼日時:2017/11/21 11:16

一度で、というのがIndexOf()のように一行で、という話ならば、そりゃムリな話です。


一行で済むようにそういうメソッドでも用意して、一行で呼び出したらいかがですか。

以下、とりあえず最もレガシーなやり方を記します。
static void Main(string[] args)
{
List<List<string>> test2 = new List<List<string>>();
test2.Add(new List<string>() { "abc" });
test2.Add(new List<string>() { "chk" });
test2.Add(new List<string>() { "def" });
test2.Add(new List<string>() { "ghi", "chk" });

var i = 0;
foreach (var item in test2)
{
var j = 0;
foreach (var childItem in item)
{
if (childItem.IndexOf("chk") >= 0)
{
Console.WriteLine(string.Format("index1:{0}, index2:{1}", i, j));
}
j++;
}
i++;
}

Console.Read();

}
}
    • good
    • 0

test2の中身はList<string>なので、質問にあるような実装では型エラーになります。



さて、二次元配列のどこのインデックスを取得したいのですか?
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!