使用 lambda 表达式将匹配词添加到列表中
Add matching word into list with lambda expression
如何使用单行代码将所有必需的单词添加到列表中?我想使用 lambda 表达式,但不知道如何使用它?也欢迎其他解决方案。当针对 NET 2.0 时,lambda 可用,但 LINQ 不可用。那么是否可以避免 LINQ dll 添加?
List<string> lstStr = new List<string>();
string[] objStr = new string[] { "Software", "Development", "department", "store", "Marketing" };
foreach (string objLcl in objStr)
{
if (objLcl.Contains("o"))
{
lstStr.Add(objLcl);
}
}
如果要添加包含的所有字符串"o":
lstStr.AddRange(objStr.Where(o => o.Contains("o")));
这应该适合你。假设您想要包含 "o" 且不等于 "o" 的条目。如果不是,您必须将 Contains
更改为 Equals
并获得预期的结果。
string[] objStr = new string[] { "Software", "Development", "department", "store", "Marketing" };
var lstStr = objStr.Where(x => x.Contains("o")).ToList();
查看 101 LINQ-Samples 了解更多信息。
您可以使用 LINQ Where()
方法,例如
lstStr = objstr.Where(s => s.Contains("o")).ToList();
根据评论,如果你想进行不区分大小写的搜索,你将不得不使用 indexOf()
方法,你可以在其中传递 StringComparison
枚举值,因为 Contains()
没有可以采用 StringComparison
枚举值的重载。
lstStr = objstr.Where(s => s.IndexOf("o", StringComparison.OrdinalIgnoreCase) >= 0)
.ToList();
同样,如果您想使用 LINQ,那么请使用正常的 foreach
循环控制,例如
foreach(var s in objstr)
{
if(s.IndexOf("o", StringComparison.OrdinalIgnoreCase) >= 0)
lstStr.Add(s);
}
下面是 Linq
string[] objStr = new string[] { "Software", "Development", "department", "store", "Marketing" };
List<string> lstStr = objStr.Where(objLcl => objLcl.Contains("o")).ToList();
为避免额外的内存分配,可以从源集合中删除项目(无 LINQ):
var lstStr = new List<string> { "Software", "Development", "department", "store", "Marketing" };
lstStr.RemoveAll(s => !s.Contains("o"));
现在,通过更多的研发,我找到了一个解决方案,而且非常简单。
lstStr.AddRange(Array.FindAll(objStr, x => x.Contains("o")));
如何使用单行代码将所有必需的单词添加到列表中?我想使用 lambda 表达式,但不知道如何使用它?也欢迎其他解决方案。当针对 NET 2.0 时,lambda 可用,但 LINQ 不可用。那么是否可以避免 LINQ dll 添加?
List<string> lstStr = new List<string>();
string[] objStr = new string[] { "Software", "Development", "department", "store", "Marketing" };
foreach (string objLcl in objStr)
{
if (objLcl.Contains("o"))
{
lstStr.Add(objLcl);
}
}
如果要添加包含的所有字符串"o":
lstStr.AddRange(objStr.Where(o => o.Contains("o")));
这应该适合你。假设您想要包含 "o" 且不等于 "o" 的条目。如果不是,您必须将 Contains
更改为 Equals
并获得预期的结果。
string[] objStr = new string[] { "Software", "Development", "department", "store", "Marketing" };
var lstStr = objStr.Where(x => x.Contains("o")).ToList();
查看 101 LINQ-Samples 了解更多信息。
您可以使用 LINQ Where()
方法,例如
lstStr = objstr.Where(s => s.Contains("o")).ToList();
根据评论,如果你想进行不区分大小写的搜索,你将不得不使用 indexOf()
方法,你可以在其中传递 StringComparison
枚举值,因为 Contains()
没有可以采用 StringComparison
枚举值的重载。
lstStr = objstr.Where(s => s.IndexOf("o", StringComparison.OrdinalIgnoreCase) >= 0)
.ToList();
同样,如果您想使用 LINQ,那么请使用正常的 foreach
循环控制,例如
foreach(var s in objstr)
{
if(s.IndexOf("o", StringComparison.OrdinalIgnoreCase) >= 0)
lstStr.Add(s);
}
下面是 Linq
string[] objStr = new string[] { "Software", "Development", "department", "store", "Marketing" };
List<string> lstStr = objStr.Where(objLcl => objLcl.Contains("o")).ToList();
为避免额外的内存分配,可以从源集合中删除项目(无 LINQ):
var lstStr = new List<string> { "Software", "Development", "department", "store", "Marketing" };
lstStr.RemoveAll(s => !s.Contains("o"));
现在,通过更多的研发,我找到了一个解决方案,而且非常简单。
lstStr.AddRange(Array.FindAll(objStr, x => x.Contains("o")));