2D数据结构 - 固定cols - 动态行

时间:2012-11-04 14:42:21

标签: c#

我需要以表格的形式将字符串数据存储在内存中, 列是固定的,但行将添加到末尾。

如果我事先知道了这些行,我想我可以使用二维字符串数组string[][]。但事实并非如此。

我目前创建了一个包含3个字段的自定义类并将它们存储在列表中,但我意识到它不是很优雅的解决方案,数据看起来像这样

  

artist-name1,album-name1,filename1
artist-name2,album-name2,   filename2
artist-name3,album-name3,filename3
等等..

哪种数据结构最适合这个?

3 个答案:

答案 0 :(得分:1)

你有很多选择,取决于你想用它做什么。

// Usefull if it's not all strings
List<Tuple<int, string, string>> 

// A list of array.
List<string[]> 

答案 1 :(得分:1)

您应该创建一个自定义类:

public class Song 
{
    public string ArtistName { get; set; }
    public string AlbumName { get; set; }
    public string Filename { get; set; }
}

然后你应该有一个列表:

var songs = new List<Song>();

这是 的类 - 不要避免它们。

如果您需要将每首歌曲“获取”为字符串,则可以覆盖.ToString中的Song

public override string ToString()
{
    return string.Format("{0}, {1}, {2}", ArtistName, AlbumName, Filename);
}

答案 2 :(得分:0)

您可以使用List<string[]>List<List<string>>。第一种情况允许您根据需要添加任意数量的行,并且将修复列。第二种解决方案更灵活,可以根据需要添加任意数量的列。

List<string[]> list = new List<string[]>();
string[] row = new string[3];
row[0] = "artist-name1";
row[1] = "album-name1";
row[2] = "filename1";
list.Add(row);

List<List<string>> list = new List<List<string>>();
List<string> row = new List<string>();
row.Add("artist-name1");
row.Add("album-name1");
row.Add("filename1");
list.Add(row);