2

私は疑問に陥り、それを解決する方法がわかりません。ケースは次のとおりです。

次のような「配列文字列」リストを作成しました。

List<string[]> definitions;

私はそれに次のような値を追加しました:

definitions.Add(new string[2] { "A", "Def.1" });
definitions.Add(new string[2] { "B", "Def.2" });

値を表示するために、次のようにします。

foreach (string[] theDefinition in definitions)
{
Console.WriteLine(theDefinition[0] + "\tdef: " + theDefinition[1]);
}

これまでのところ、これは正常に機能しますが、foreachなしで値を表示するにはどうすればよいですか?

Console.WriteLine(definitions[0] ...)

インデックス0のリストから「A」または「Def.1」のいずれかを表示するには、3つのドットに何を書き込む必要がありますか。

これを克服するには、次のようなことを行うと思います。

string[] temp = definitions[0]
Console.WriteLine(temp[0] + ", " + temp[1]);

追加の変数を使用せずにConsole.WriteLineを使用するだけでそれを実現するにはどうすればよいですか?これは可能ですか?そしてどうやって?前もって感謝します。

4

6 に答える 6

4
Console.WriteLine(definitions[0][0]  + "\tdef: " + definitions[0][1]);
于 2012-05-03T16:33:56.270 に答える
2

より良い方法は、定義タイプを宣言することです

public class Definition
{
    public string Name { get; set; }
    public string Value { get; set; }

    public override string ToString()
    {
        return Name + "\tdef: " + Value;   
    }
}

今、あなたはこのようにあなたのコードを単純化することができます

List<Definition> definitions = new List<Definition> {
    new Definition { Name = "A", Value = "Def.1" },
    new Definition { Name = "B", Value = "Def.2" },
};

foreach (Definition theDefinition in definitions)    
{    
    Console.WriteLine(theDefinition);    
}    

当然のことながら、Nikhil Agrawalによって提案された流暢なバージョンを使用できます。これは、現在ではさらに単純になっています。

definitions.ForEach(def => Console.WriteLine(def)); 

プリント

def:Def.1
B def:Def.2

また、フィールドへのアクセスは、配列インデックスを使用するよりもわかりやすくなります

Definition def = definitions[0];
Console.WriteLine(def.Name + ", " + def.Value);

// compared to
// Console.WriteLine(temp[0] + ", " + temp[1]);  
于 2012-05-03T16:44:34.613 に答える
2

他の答えはもちろん正しいですが、2次元文字列配列のリストの代わりに辞書を使用しないのはなぜですか。

        var definitions = new Dictionary<string, string> 
        {
            { "A", "Def.1" },
            { "B", "Def.2" }
        };

        foreach (var keypair in definitions)
        {
            Console.WriteLine("{0} \tdef: {1} ", keypair.Key, keypair.Value);
        }
于 2012-05-03T16:45:13.627 に答える
1

次のようにアクセスできますdefinitions[definition_index][string_index]

試す:

Console.WriteLine(definitions[0][0] + "\tdef: " + definitions[0][1]);
于 2012-05-03T16:35:18.577 に答える
1

3行ではなく1行の回答。LINQがここにある場合、Forまたはforeachループまたは追加変数は使用されません

definitions.ForEach(x => Console.WriteLine(x[0] + "\tdef: " + x[1]));
于 2012-05-03T16:36:51.067 に答える
1
for (var i = 0; i < definitions.Length; i++)
{
    Console.WriteLine(definitions[i][0] + "\tdef: " + definitions[i][1]);
}
于 2012-05-03T16:40:55.060 に答える