2

そのような配列があるとしましょう(C#では不可能であることはわかっています):

string[,] arr = new string[,]
{
    {"expensive", "costly", "pricy", 0},
    {"black", "dark", 0}
};

では、このアイテムをリストに追加する方法と、「価格」0の間に新しいアイテムを追加する方法を教えてください。ネット上で例を見つけることができませんでした。

4

6 に答える 6

6

配列は不変であるため、アイテムを実際に追加または削除することはできません。たとえば、アイテムを別の配列インスタンスにコピーして、不要なものを除いてコピーするか、同じことを行いますが、より高い次元を使用して、追加する必要があるアイテムを追加するだけです。

List<T>hereを使用することをお勧めします。ここでTは、配列に追加するものを反映する単純な型にすることができます。例えば:

class Thing {
    public string Prop1 {get; set; }
    public string Prop2 {get; set; }
    public string Prop3 {get; set; }
    public int Prop4 {get; set; }
}

List<Thing> list = new List<Thing>();

list.Add(new Thing() { Prop1 = "expensive", Prop2 = "costly", Prop3 = "pricy", Prop4 = 0};

次に、アイテムを挿入できます。

list.Insert(1, new Thing() { Prop1 = "black", Prop2 = "dark", Prop4 = 0});

これがうまくいくかどうかはわかりませんが、「ぎざぎざの」データが に収まるかどうかによって異なりますThing。明らかに、ここで「Prop1」などは、配列にあるデータの実際のプロパティ名になります。

于 2012-10-11T18:57:05.163 に答える
5

アイテムを追加(挿入)する場合は、配列を使用しないでください。を使用しList<>ます。

あなたのサンプルはによってカバーされるかもしれません

var data = new List<string>[2] { new List<string>(), new List<string> () };

次に、次のようなステートメントを使用できます

data[0].Add("expensive");
string s = data[1][1];     // "dark"

もちろん0、文字列配列やリストに含めることはできません。使用することもできますnullが、最初は避けてください。

于 2012-10-11T18:50:04.613 に答える
1

さて、あなたは何のリストが欲しいですか?今、あなたは文字列と整数を持っているのでobject、あなたの共通の基本クラスもそうです

ジャグ配列(配列の配列)を実行できます。

object[][] arr = new []
{
    new object[] {"expensive", "costly", "pricy", 0},
    new object[] {"black", "dark", 0}
};

またはリストのリスト:

List<List<object>> arr = new List<List<object>> 
{
    new List<object> {"expensive", "costly", "pricy", 0},
    new List<object> {"black", "dark", 0}
};

しかし、どちらも悪いデザインのようです。あなたが達成しようとしていることについてより多くの情報を与えるならば、あなたはおそらくいくつかのより良い提案を得ることができます。

于 2012-10-11T18:53:31.200 に答える
0

あなたの仕事は少し奇妙で、どこで役立つのかわかりません。しかし、あなたの文脈では、それなしListでそれを行うことができます。インデクサーによって要素を通過する必要があります(例では、string [、]のアイテムは2つのインデックスでのみ取得できます)。

だからここでうまくいく解決策、私は面白いだけのためにそれをやった

var arr = new[,]
                          {
                              {"expensive", "costly", "pricy", "0"},
                              {"black", "dark", "0", "0"}
                          };
            int line = 0;
            int positionInLine = 3;
            string newValue = "NewItem";


            for(var i = 0; i<=line;i++)
            {
                for (int j = 0; j <=positionInLine; j++)
                {
                    if (i == line && positionInLine == j)
                    {
                        var tmp1 = arr[line, positionInLine];
                        arr[line, positionInLine] = newValue;

                        try
                        {
                            // Move other elements
                            for (int rep = j+1; rep < int.MaxValue; rep++)
                            {
                                var tmp2 = arr[line, rep];

                                arr[line, rep] = tmp1;

                                tmp1 = tmp2;

                            }
                        }
                        catch (Exception)
                        {

                            break;
                        }
                    }
                }
            }
于 2012-10-11T19:16:12.510 に答える
0

にすることもできますDictionary<string,string>が、キーは一意のままにする必要があります。その後、そのようにループすることができます

Dictionary<string,string> list = new Dictionary<string,string>();
foreach(KeyValuePair kvp in list) 
{
    //Do something here
}
于 2012-10-11T18:51:17.033 に答える