C#动态数组/索引

时间:2015-02-04 20:56:56

标签: c# arrays arraylist

我在我的c#程序中创建了一个string []数组,以保存一堆元素的位置(“name”,“Position”)。问题是我必须引入一个新元素,我必须根据元素索引在几个地方更改代码:

   string[] list = new string[4];
   list[0] = "[ELEMENT #1 NAME],[ELEMENT #1POSITION]";
   list[1] = "[ELEMENT #2 NAME],[ELEMENT #2POSITION]";
   list[2] = "[ELEMENT #3 NAME],[ELEMENT #3POSITION]";
   list[3] = "[ELEMENT #4 NAME],[ELEMENT #4POSITION]";

我正在寻找的是类似于动态数组的东西,这样我每次从列表中引入/删除元素时都不必更改索引位置。

5 个答案:

答案 0 :(得分:4)

您可以将List<string>用作动态数组,它支持IEnumerable<string>进行枚举,也可以调用LINQ和ToArray()

例如:

var list = new List<string>();

list.Add("[ELEMENT #1 NAME],[ELEMENT #1POSITION]");

string array[] = list.ToArray();

但是,我实际上建议使用字典而不是列表,字典会让你存储键值对。

例如:

var dict = new Dictionary<string,int>();

dict["Element #1 Name"] = #Element #1 Position#;

请注意,我并不知道该职位的类型,可能是intstring甚至是Point,但您明白了。< / p>

然后,您不需要为索引而烦恼,而是按名称引用所有内容:

var el1_pos = dict["Element #1 Name"];
var el999_pos = dict["Element #999 Name"];

答案 1 :(得分:1)

如果您想要动态调整大小的集合并且不打扰索引,则可以使用List<T>。您还应该创建一个包含两个属性(NamePosition)的类型,并拥有该类型的列表,而不是将它们存储为string。它更容易维护,每次要获取/设置特定对象的NamePosition时,都不必解析字符串。

答案 2 :(得分:1)

通常,您只需在此使用List<String>即可。 Add方法允许您只添加元素,无需索引。

List<string> list = new List<string>();
list.Add("Test");

在你的情况下,因为你有&#34;姓名&#34;和&#34;职位&#34;相互关联,请考虑使用List<PositionedThing>(换言之自定义类)或Dictionary<String, String>来存储映射。

该课程如下:

public class PositionedThing
{
    public String Name {get; set;}
    public String Position {get; set;}
}

答案 3 :(得分:0)

尝试

List<string> list = new List<string>();
list.Add("[ELEMENT #1 NAME],[ELEMENT #1POSITION]")

除非我误解了你想要的问题

答案 4 :(得分:0)

您问题中的最后一个词是您要查找的内容:System.Collections.Generic命名空间中的List<T>类型:

var list = new List<string>();
list.Add("Blah");
list.Add("Blah blah");
…

接下来,我是否可以建议不要在格式化字符串中编码所有位置信息,而是定义表示位置的自定义类型;至少这样的事情:

class Location
{
    public string Name { get; set; }
    public string Position { get; set; }
}

然后构建该类型的实例列表:

var locations = new List<Location>();
location.Add(new Location { Name = "Kitchen cupboard", Position = "Above the stove" });
location.Add(new Location { Name = "Kennel", Position = "In the garden" });
…

(如您所见,就像使用数组T[]一样,您可以为任何类型List<T>创建T。)