C# 从逗号分隔的字符串中查找特定字符串的最简单方法
我必须从逗号分隔的字符串中提取不同的值。输入字符串可以包含重复的值。这是用于自动完成功能。 例如: 我有一个字符串:shop,dell,image,just,just do,file,just,do,shop…. 我的要求是,当我通过“jus”时,输出字符串应该是:“just,just do” 要逐行解释此代码,请执行以下操作:C# 从逗号分隔的字符串中查找特定字符串的最简单方法,c#,csv,C#,Csv,我必须从逗号分隔的字符串中提取不同的值。输入字符串可以包含重复的值。这是用于自动完成功能。 例如: 我有一个字符串:shop,dell,image,just,just do,file,just,do,shop…. 我的要求是,当我通过“jus”时,输出字符串应该是:“just,just do” 要逐行解释此代码,请执行以下操作: 创建名为csv的变量,该变量包含文本 使用Split函数将字符串拆分为多个字符串 使用LINQ查询仅获取所需的文本,即:在本例中,选择以“jus”开头的字符串 使用Di
csv
的变量,该变量包含文本Split
函数将字符串拆分为多个字符串Distinct
方法从列表中删除重复条目您需要用逗号分割字符串,然后搜索结果字符串
string csvList = "shop,dell,image,just,just do,file,just,do,shop";
string search = "jus"; // your search string goes here
var splitResults = csvList.Split(',').ToList();
// improvement: cache SplitResults once, and retrieve it from cache on every search
var searchResults = splitResults.Where(x => x.StartsWith(search)).Distinct();
您可以将最后一行更改为使用Contains
在单词内搜索,或使用StartsWith(search,StringComparison.OrdinalIgnoreCase)
忽略搜索时的大小写
对于非常大的输入,您应该缓存
列表拆分结果
,以便准备好搜索项目。如果您的容量很大,您肯定不希望每次搜索时都拆分csvList
。我使用string.split(,)将字符串转换为数组,然后在数组中搜索。在提供的两种解决方案中,哪一种最快?因为输入字符串将是巨大的..通过关键字或方法链使用LINQ没有区别;两者都被编译为相同的IL(http://stackoverflow.com/a/16487601/1937294
)。似乎效率是有争议的(http://stackoverflow.com/questions/1182922/what-is-the-efficiency-and-performance-of-linq-and-lambda-expression-in-net
),但您最初的问题要求的是最简单的方法。@Andrew感谢您的解释。性能是我最重要的因素,代码也不应该太复杂。您的代码满足我的要求。在提供的两个解决方案中,哪一个最快?因为输入字符串将是巨大的。@nitinvertigo它们的速度可能几乎相同。它们都使用Distinct()
,这将是最慢的位。
string csvList = "shop,dell,image,just,just do,file,just,do,shop";
string search = "jus"; // your search string goes here
var splitResults = csvList.Split(',').ToList();
// improvement: cache SplitResults once, and retrieve it from cache on every search
var searchResults = splitResults.Where(x => x.StartsWith(search)).Distinct();