上下文
我有两个用户输入字段,我想将输入数据保存到字符串数组列表中(文件或数据库中的 NOT )。
作为我未来工作的一部分,我将不得不按特定值执行搜索,并列出/显示用户目前输入的所有输入。而且,一个输入字段的值应该与其他输入字段相关联。 例如,在第一个字段中,用户写入" 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
会做什么?private List <string[]> allItems = new List <string[]>();
)会根据需要增加吗?答案 0 :(得分:2)
如果你真的想要输入中的第一个单词&#34;拥有&#34;另外两个,我会使用>>> [b for a, b in sorted(pair for pair in zip(list2, list1) if pair[0] != '')]
['d', 'a', 'b']
。这将原始单词与同义词分开,并使其可搜索。
你是正确的,你需要多维存储(数组列表,数组数组等)。或者,更好的是,创建一个Dictionary<string, List<string>>
类:
SynonymEntry
然后你可以创建一个简单的public class SynonymEntry
{
public string EntryWord { get; set; }
public List<string> Synonyms { get; set; }
}
来存储所有数据。
列表与数组 - 如果我知道以后不会再添加新信息,我只会使用数组。
答案 1 :(得分:2)
是否只是通过一个简单的List或数组将字符串输入保存到Array of List中是正确的选择?一般来说,数组列表的作用是什么?
在你的情况下,不。总是试着保持简单。我从未见过使用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; }
}
希望这有帮助。
答案 2 :(得分:0)
你没有告诉你的应用程序的上下文(你刚才说非常像一个同义词应用程序),但如果你真的在存储同义词,那么知道同义词是一个二元关系;即,如果A与B同义,则B也是A的同义词。
在这种情况下,我只是将所有单词(无论是主要单词还是同义词)存储在一个大的字符串列表中(List<string>
)。除了这个列表,我还将另一个商店存储在List<(int ,int)>
中,在每个元组中存储主词和同义词的索引。
如果你使用数据库序列化这个列表(你说你不会),这将转换为两个简单的表;单词(int ID,varchar Word)和Relations(int ID1,int ID2)。
答案 3 :(得分:0)
您可以使用List&lt; List&lt; string&gt;&gt;哪个会根据需要增长。另一种解决方案可以是Dictionnary&lt; string,List&lt; string&gt;&gt;你应该尝试选择合适的。字符串数组不像列表那样容易增长。