假设我有一个这样的数组(我知道在c#上不可能):
string[,] arr = new string[,]
{
{"expensive", "costly", "pricy", 0},
{"black", "dark", 0}
};
那么我如何在列表中添加这些项目以及如何在“pricy”和 0 之间添加新项目?我在网上找不到任何例子。
答案 0 :(得分:6)
数组是不可变的,因此您无法真正添加或删除项目。例如,您唯一能做的就是将项目复制到另一个数组实例,减去您不想要的项目,或者执行相同操作,但使用更高的维度并添加您需要添加的项目。
我建议在这里使用List<T>
,其中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'等等就是数组中数据的实际属性名称。
答案 1 :(得分:5)
如果要添加(插入)项目,请不要使用数组。使用List<>
。
您的样本可能会被
覆盖var data = new List<string>[2] { new List<string>(), new List<string> () };
然后您可以使用
之类的语句data[0].Add("expensive");
string s = data[1][1]; // "dark"
当然不可能在字符串数组或List中包含0
。您可以使用null
但请先尝试避免使用它。
答案 2 :(得分:1)
那么你想要一个列表 OF ?现在你有了字符串和整数,所以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}
};
但这两个看起来都很糟糕。如果你提供更多关于你想要完成什么的信息,你可能会得到一些更好的建议。
答案 3 :(得分:0)
您可以将其设为Dictionary<string,string>
,但密钥必须保持唯一。然后你就可以像这样循环
Dictionary<string,string> list = new Dictionary<string,string>();
foreach(KeyValuePair kvp in list)
{
//Do something here
}
答案 4 :(得分:0)
你的任务有点奇怪,我不明白它在哪里有用。但在您的上下文中,您可以在没有List
的情况下执行此操作,依此类推。你应该逐个索引元素(在你的示例项中,在[,]中只能得到两个索引)。
所以这里的解决方案有效,我只是为了有趣的
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;
}
}
}
}
答案 5 :(得分:0)
class Program
{
static void Main(string[] args)
{
List<Array> _list = new List<Array>();
_list.Add(new int[2] { 100, 200 });
_list.Add(new string[2] { "John", "Ankush" });
foreach (Array _array in _list)
{
if (_array.GetType() == typeof(Int32[]))
{
foreach (int i in _array)
Console.WriteLine(i);
}
else if (_array.GetType() == typeof(string[]))
{
foreach (string s in _array)
Console.WriteLine(s);
}
}
Console.ReadKey();
}
}