【问题标题】:Easiest way to find a particular string from comma separated strings从逗号分隔的字符串中查找特定字符串的最简单方法
【发布时间】:2014-02-11 06:58:41
【问题描述】:

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

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

【问题讨论】:

  • 我已经使用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 感谢您的解释。性能对我来说是最重要的因素,代码也不应该太复杂。您的代码满足我的要求。

标签: c# csv


【解决方案1】:
var csv = "shop,dell,image,just,just do,file,just,do,shop";
var arr = csv.Split(',');

var suggested = from word in arr
                where word.StartsWith("jus")
                select word;
suggested = suggested.Distinct();

逐行解释这段代码:

  1. 创建名为 csv 的变量,其中包含文本
  2. 使用Split函数将字符串拆分成多个字符串
  3. 使用 LINQ 查询仅获取您想要的文本,即:在本例中选择以“jus”开头的字符串。
  4. 使用Distinct 方法从列表中删除重复条目。

【讨论】:

  • 在提供的两种解决方案中,哪一种最快?因为输入字符串会很大..
  • @nitinvertigo 它们的速度可能几乎相同。他们都使用Distinct(),这将是最慢的位。
【解决方案2】:

您需要用逗号分隔字符串,然后搜索结果字符串。

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) 忽略搜索的大小写。

在输入非常大的情况下,您应该缓存List<string> splitResults,以便您准备好搜索项目。如果您的搜索量很大,您绝对不想在每次搜索时都拆分csvList

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多