[英]When should I use List of Array (i.e. List<string []> = new List<string []>()) in C#?
上下文
我有两个用户输入字段,我要输入的数据保存到字符串数组(而不是在文件或DATABSE)的列表。
作为我未来工作的一部分,我将必须按特定值进行搜索,并列出/显示用户到目前为止输入的所有输入。 此外,一个输入字段的值应与另一输入字段相关联。 例如,在第一个字段中,用户写“ Nice”,在第二个字段中,他写多个单词:“ beautiful”,“ Excellent”。 这意味着最后两个单词应属于第一个单词“ Nice”。 几乎就像一个同义词应用程序 。
但是,目前,我的重点是存储输入,这是在用户单击“ Save
按钮时发生的。
码
实现一个接口的类:
class SynonymApp : ISynonym
{
private List <string[]> allItems = new List <string[]>();
public void AddSynonyms(IEnumerable<string> synonyms)
{
//adding objects at the end of the list. Am I doing right?
allItems.Add((synonyms.ToArray<string>()));
}
}
发生按钮单击事件的类:
private void button1_Click(object sender, EventArgs e)
{
List<string> userInput = new List<string>();
string wordInput = textBox1.Text;
if (wordInput == "") throw new Exception("Please give input");
char[] emptySpace = new char [] {' ', '\t'};
string[] synonymInput = textBox2.Text.Split(emptySpace);
userInput.Add(wordInput);
userInput.AddRange(synonymInput);
synonymApp.AddSynonyms(userInput);
}
问题
List
或array
List
是正确的选择吗? 通常, Array
List
有什么作用? private List <string[]> allItems = new List <string[]>();
)会根据需要增加大小吗? 如果您确实希望输入中的第一个单词“拥有”其他两个单词,则可以使用Dictionary<string, List<string>>
。 这样可以将原始单词与同义词分开,并使其可搜索。
您正确的需要多维存储(数组列表,数组数组等)。 或者,最好创建一个SynonymEntry
类:
public class SynonymEntry
{
public string EntryWord { get; set; }
public List<string> Synonyms { get; set; }
}
然后,您可以创建一个简单的List<SynonymEntry>
来存储所有数据。
列表与数组-仅当我知道以后再也不会添加新信息时,才使用数组。
将字符串输入保存到简单列表或数组中的正确选择是正确的选择吗? 通常,数组列表有什么作用?
就您而言,否。请始终尝试使事情简单。 我从来没有看到使用List<string[]>
。 数组和列表是两个不同的东西,不应结合使用。 即使您使用它,也将难以维护,调试并且不会达到最佳状态。
我的数组列表(即
private List <string[]> allItems = new List <string[]>();
)会根据需要增加大小吗?
是的,但是除非有特殊原因,否则我将尽量避免使用List<string[]>
。
IMO,您应该将代码组织到类中并使用HashSet
因为它通常比List
快。
class MySynonyms
{
public string Word { get; set; }
public HashSet<string> Synonyms { get; set; }
}
希望这可以帮助。
您没有告诉应用程序的上下文(您刚才说的很像Synonym App ),但是如果您确实要存储同义词,请知道同义词是二进制关系。 即,如果A与B同义,则B也与A同义。
在这种情况下,我只是将您的所有单词(无论是主要单词还是同义词)存储在一个很大的字符串List<string>
( List<string>
)中。 除了这个列表,我还将另一个存储关系存储在List<(int ,int)>
,在每个元组中存储主要单词和同义词的索引。
如果使用数据库序列化此列表(您说不会),则这将转换为两个简单的表。 单词(int ID,varchar Word)和关系(int ID1,int ID2)。
您可以改用List <List <string >>,它会根据需要增长。 另一个解决方案可能是Dictionnary <string,List <string >>,您应该尝试选择正确的解决方案。 字符串数组不像列表那样容易增长。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.