C# 从逗号分隔的字符串中查找特定字符串的最简单方法

C# 从逗号分隔的字符串中查找特定字符串的最简单方法,c#,csv,C#,Csv,我必须从逗号分隔的字符串中提取不同的值。输入字符串可以包含重复的值。这是用于自动完成功能。 例如: 我有一个字符串:shop,dell,image,just,just do,file,just,do,shop…. 我的要求是,当我通过“jus”时,输出字符串应该是:“just,just do” 要逐行解释此代码,请执行以下操作: 创建名为csv的变量,该变量包含文本 使用Split函数将字符串拆分为多个字符串 使用LINQ查询仅获取所需的文本,即:在本例中,选择以“jus”开头的字符串 使用Di

我必须从逗号分隔的字符串中提取不同的值。输入字符串可以包含重复的值。这是用于自动完成功能。 例如:

我有一个字符串:shop,dell,image,just,just do,file,just,do,shop…. 我的要求是,当我通过“jus”时,输出字符串应该是:“just,just do

要逐行解释此代码,请执行以下操作:

  • 创建名为
    csv
    的变量,该变量包含文本
  • 使用
    Split
    函数将字符串拆分为多个字符串
  • 使用LINQ查询仅获取所需的文本,即:在本例中,选择以“jus”开头的字符串
  • 使用
    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();