そのような配列があるとしましょう(C#では不可能であることはわかっています):
string[,] arr = new string[,]
{
{"expensive", "costly", "pricy", 0},
{"black", "dark", 0}
};
では、このアイテムをリストに追加する方法と、「価格」と0の間に新しいアイテムを追加する方法を教えてください。ネット上で例を見つけることができませんでした。
配列は不変であるため、アイテムを実際に追加または削除することはできません。たとえば、アイテムを別の配列インスタンスにコピーして、不要なものを除いてコピーするか、同じことを行いますが、より高い次元を使用して、追加する必要があるアイテムを追加するだけです。
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」などは、配列にあるデータの実際のプロパティ名になります。
アイテムを追加(挿入)する場合は、配列を使用しないでください。を使用し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
が、最初は避けてください。
さて、あなたは何のリストが欲しいですか?今、あなたは文字列と整数を持っているので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}
};
しかし、どちらも悪いデザインのようです。あなたが達成しようとしていることについてより多くの情報を与えるならば、あなたはおそらくいくつかのより良い提案を得ることができます。
あなたの仕事は少し奇妙で、どこで役立つのかわかりません。しかし、あなたの文脈では、それなし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;
}
}
}
}
にすることもできますDictionary<string,string>
が、キーは一意のままにする必要があります。その後、そのようにループすることができます
Dictionary<string,string> list = new Dictionary<string,string>();
foreach(KeyValuePair kvp in list)
{
//Do something here
}