1

lstというList<string[]>があります。

[0] "ABC" "DEF" "GHI"
[1] "JKL" "MNO" "PQR"
[2] etc, etc...

各lstメンバーの最後に別の文字列を追加するにはどうすればよいですか?

string s = "EndOfBlock";

[0] "ABC" "DEF" "GHI" "EndOfBlock"
[1] "JKL" "MNO" "PQR" "EndOfBlock"
[2] etc, etc...

ありがとうございました。

4

5 に答える 5

5

次のようになります。

var lst = new List<string[]>();
lst.Add(new string[] { "ABC", "DEF" });
lst.Add(new string[] { "GHI", "JKL" });

foreach (var item in lst)
{
    Console.WriteLine(item.Length);
}

for (int i = 0; i < lst.Count; ++i)
{
    var array = lst[i];
    Array.Resize(ref array, array.Length + 1);
    array[array.Length - 1] = "EndOfBlock";
    lst[i] = array;
}

foreach (var item in lst)
{
    Console.WriteLine(item.Length);
}

Array.Resize参照

于 2012-09-25T16:35:51.077 に答える
3

コメント投稿者が指摘しているように、あなたは本当に欲しいようですList<List<string>>。ただし、に固執したい場合はList<string[]>、各配列を展開する方法を次に示します。

List<string[]> list = ...
for(int i = 0; i < list.Count; i++)
{
    // copy to a local variable (list[i] is a property, which can't be passed 'ref')
    string[] array = list[i];

    // resize the local variable. (this creates a new string[] object)
    Array.Resize(ref array, array.Length + 1);
    array[array.Length - 1] = "EndOfBlock";

    // put the new object back in the list, replacing the old smaller one.
    list[i] = array;
}
于 2012-09-25T16:42:10.257 に答える
1

List<List<string>>また、 :を使用することをお勧めします。

List<List<string>> lst = new List<List<string>>();
lst.ForEach(i=>i.Add("EndOfBlock"));     
于 2012-09-25T16:39:42.807 に答える
0

あなたが本当にこれをしたいのなら、あなたはこれをするIList<string[]>ことができます、

var lst = new List<string[]>
{
    { "ABC", "DEF", "GHI" },
    { "JKL", "MNO", "PQR" },
    ...
}

var blockEnd = new string[] { "EndOfBlock" };

lst = lst.Select(a => 
    (a.Select(s => s).Concat(blockEnd))
    .ToArray()).ToList();

lstだった場合、これははるかに「より良い」でしょうIlist<Ilist<string>>

var lst = new List<List<string>>
{
    { "ABC", "DEF", "GHI" },
    { "JKL", "MNO", "PQR" },
    ...
}

foreach(var row in lst)
{
   row.Add("EndOfBlock");
}
于 2012-09-25T16:44:45.920 に答える
0

配列のリストを保持したい場合は、次のようにすることができます。

List<string[]> lst = new List<string[]); //Where this is the poplated list instead of new;
for (ini i = 0; i < lst.Count; i++)
{
   List<string> tmpList = new List<string>(lst[i]);
   tmpList.Add("EndOfBlock");
   lst[i] = tmpList.ToArray();
}
于 2012-09-25T16:46:25.777 に答える