繁体   English   中英

什么时候应该使用数组列表(即列表) <string []> =新清单 <string []> ())在C#中?

[英]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);
}

问题

  1. 将字符串输入保存到简单Listarray List是正确的选择吗? 通常, Array List有什么作用?
  2. 我的数组列表(即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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM