string str = "To be or not to be"; string[] str2 = str.ToLower().Split(' '); List<string> newStr = new List<string>(); foreach (string item in str2) { if (newStr.Contains(item)) { continue; } else { newStr.Add(item); } } foreach (string item in newStr) { Console.Write(item + ' '); } 改进代码
时间: 2024-02-14 07:07:30 浏览: 32
这段代码的问题在于,它没有考虑到单词之间可能会有标点符号或其他非字母字符,这些字符会导致程序将它们和相邻的单词看成不同的单词。另外,在创建新列表时,可以使用 Linq 中的 Distinct() 方法来去除重复项,而不是手动遍历列表。
以下是改进后的代码:
```
string str = "To be or not to be!";
string[] str2 = str.ToLower().Split(new char[] {' ', ',', '.', '!', '?', ';', ':'}, StringSplitOptions.RemoveEmptyEntries);
List<string> newStr = str2.Distinct().ToList();
foreach (string item in newStr)
{
Console.Write(item + ' ');
}
```
改进后的代码使用 Split() 方法的重载形式,将空格、逗号、句号、感叹号、问号、分号和冒号都作为分隔符,将字符串分割成单词数组。然后使用 Linq 的 Distinct() 方法来去除重复项,并将结果转换为列表。最后遍历列表,输出每个单词。这样可以确保所有单词都能被正确处理。
相关问题
这写上这段代码后为何caombbox输入时会从右往左输入,并且无法匹配下拉列表中的内容 private void comboBox1_TextChanged(object sender, EventArgs e){ string input = comboBox1.Text; var matchedItems = comboBox1.Items.Cast<string>() .Where(item => item.ToLower().Contains(input.ToLower())); comboBox1.DataSource = matchedItems.ToList();}
这段代码中的问题在于,每次输入改变时,都会重新设置下拉列表的数据源,导致下拉列表中的数据不断变化,使得输入时无法匹配下拉列表中的内容。
另外,输入从右往左的问题可能是因为您的系统是从右到左的语言环境,可以尝试更改输入法或者更改系统语言环境来解决。
要解决这个问题,您可以考虑使用一个固定的数据源来填充下拉列表,然后在文本改变事件中,根据输入内容筛选数据并更新下拉列表中的显示内容。具体实现可以参考下面的代码:
```
private List<string> items = new List<string>(); // 定义一个固定的数据源
private void Form_Load(object sender, EventArgs e)
{
// 初始化下拉列表的数据源
items.Add("Apple");
items.Add("Banana");
items.Add("Cherry");
items.Add("Durian");
comboBox1.DataSource = items;
}
private void comboBox1_TextChanged(object sender, EventArgs e)
{
string input = comboBox1.Text;
var matchedItems = items.Where(item => item.ToLower().Contains(input.ToLower()));
comboBox1.DataSource = matchedItems.ToList();
}
```
这样,每次输入改变时,只需要对固定的数据源进行筛选,并更新下拉列表中的显示内容即可,避免了重复设置数据源的问题,同时也能够正确匹配下拉列表中的内容。
var attr = (ExcelObjectAttribute)ProgramModelEntities[0]?.GetType() ?.GetCustomAttributes(typeof(ExcelObjectAttribute), false) ?.FirstOrDefault(); List<Guid> ids = _coreRepository.Context.Set<CProgramme>().Select(i => i.Id).ToList(); List<String> errorIds = new(); bool successFlag = true; foreach (var cProgramme in Programmes) { if (ids.Contains(cProgramme.Id)) { successFlag = false; errorIds.Add(cProgramme.Id.ToString()); _errorLogService.SaveErrorLog(cProgramme.Id.ToString(), "Program Id already exists", attr.WokeSheetName); continue; } else { ids.Add(cProgramme.Id); } var exist = _coreRepository.Context.Set<CProgramme>().Where(s => s.Id != cProgramme.Id && s.Name.ToLower() == cProgramme.Name.ToLower() && s.SchoolId == cProgramme.SchoolId).Select(i => i.Id).ToList(); if (exist.Count > 0) { errorIds.Add(cProgramme.Id.ToString()); _errorLogService.SaveErrorLog(cProgramme.Id.ToString(), "Program name already exists", attr.WokeSheetName); successFlag = false; } } return successFlag; 优化一下这段代码
可以尝试以下优化:
1. 使用HashSet代替List,可以提高ids的查找速度。
2. 使用LINQ的Any方法代替ToList+Count,可以提高exist的查询速度。
3. 将错误日志的保存放到一个集合中,在循环结束后一次性保存,可以减少数据库操作。
优化后的代码如下:
```
var attr = (ExcelObjectAttribute)ProgramModelEntities[0]?.GetType()
?.GetCustomAttributes(typeof(ExcelObjectAttribute), false)
?.FirstOrDefault();
HashSet<Guid> ids = new(_coreRepository.Context.Set<CProgramme>().Select(i => i.Id));
List<string> errorLogs = new();
foreach (var cProgramme in Programmes)
{
if (ids.Contains(cProgramme.Id))
{
errorLogs.Add($"{cProgramme.Id}: Program Id already exists");
continue;
}
if (_coreRepository.Context.Set<CProgramme>().Any(s =>
s.Id != cProgramme.Id &&
s.Name.ToLower() == cProgramme.Name.ToLower() &&
s.SchoolId == cProgramme.SchoolId))
{
errorLogs.Add($"{cProgramme.Id}: Program name already exists");
continue;
}
ids.Add(cProgramme.Id);
}
if (errorLogs.Any())
{
_errorLogService.SaveErrorLogs(errorLogs, attr.WokeSheetName);
return false;
}
return true;
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)