通过子字符串和索引对C#中的集合进行有效排序

约翰·D

当用户在搜索框中输入内容时,我正在使用实体框架从数据库中获取一些记录,并且需要在提取项目时对其进行排序。我将尝试通过以下方法简化问题。

说我有一个像下面这样的随机列表,我想根据子字符串的出现将其排序

var randomList = new List<string> { "corona", "corolla", "pecoroll", "copper", "capsicum", "because", "cobra" };
var searchText = "cor";

分类:

var sortedList = testList.OrderBy(x => x.IndexOf("cor"));

输出:

铜->辣椒->因为->眼镜蛇->电晕->花冠-> pecoroll

我知道代码可以按预期工作,因为列表按子字符串的索引排序,对于输出中的前4个项目,该索引为-1;对于第5个和第6个项目,为0;对于第7个项目,值为2。

问题:

我正在尝试按searchsString的索引进行排序,它是最接近的匹配项,以便为用户提供类似项目的建议。预期结果将是类似

花冠->电晕->佩克罗尔->眼镜蛇->铜->辣椒->因为

其中包含匹配的搜索文本的较低索引的项目将首先出现,从搜索文本中以少1个字符的方式递归对列表进行排序,直到没有剩余字符。即,优先级赋予先后顺序为“ cor”,“ co”,“ c”的索引。我可能可以为此编写一个for循环或递归方法,但是考虑到我的代码从数据库中获取记录,因此应该考虑性能,是否有内置的LINQ方法在实现此目的的集合或库上实现此目标?谢谢您的帮助

乔治·科伍德

要严格解决您的问题:“是否有内置的LINQ方法来实现这一目标?”,我相信答案是否定的。这种“最佳匹配”搜索是非常主观的。例如,可以说“眼镜蛇”比“ pecoroll”更好地匹配,因为用户更有可能在要求的“ r”之前错过了“ b”,而不是排除了前两个字母“ pe” “ pecoroll”一词。我认为,此行为的“适当”实现会考虑键接近度,常见的拼写错误以及许多其他指标,以最好地自动完成输入。可能会有一些已建立的库可用,而不是开发自己的方法。

但是,假设您确实想要您要求的确切行为,虽然听起来您很乐意自己做,但这是我的两分钱:

static List<string> SortedList(List<string> baseList, string searchString)
{
    // Take a modifiable copy of the base list
    List<string> sourceList = new List<string>(baseList);
    // Sort it first alphabetically to resolve tie-breakers
    sourceList.Sort();
    // Create a instance of our list to be returned
    List<string> resultList = new List<string>();

    while(
            // While there are still elements to be sorted
            (resultList.Count != baseList.Count) &&
            // And there are characters remaining to be searched for
            (searchString.Length > 0))
    {
        // Order the list elements, that contain the full search string,
        // by the index of that search string.
        var sortedElements =  from item in sourceList
                              where item.Contains(searchString)
                              orderby item.IndexOf(searchString)
                              select item;

        // For each of the ordered elements, remove it from the source list
        // and add it to the result
        foreach(var sortedElement in sortedElements)
        {
            sourceList.Remove(sortedElement);
            resultList.Add(sortedElement);
        }

        // Remove one character from the search to be used against remaining elements
        searchString = searchString.Remove(searchString.Length - 1, 1);
    }
    return resultList;
}

测试:

var randomList = new List<string> { "corona", "corolla", "pecoroll", "copper", "capsicum", "because", "cobra" };
var searchText = "cor";
var sortedList = SortedList(randomList, searchText);

foreach(string entry in sortedList)
{
    Console.Write(entry + ", ");
}

我得到:

corolla, corona, pecoroll, cobra, copper, capsicum, because,

我希望这有帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Ruby中对数字和字符串进行排序的有效方法?

来自分类Dev

在R中通过索引有效地替换字符串元素

来自分类Dev

在R中通过索引有效地替换字符串元素

来自分类Dev

检查子字符串的有效方法C#

来自分类Dev

在C#中,字符串不是有效的日期时间

来自分类Dev

C#字符串未在Parameters.AddWithValue中识别为有效的DateTime

来自分类Dev

有效地替换字符串中的子字符串

来自分类Dev

有效地在任意索引处对字符串进行分区

来自分类Dev

有效地在任意索引处对字符串进行分区

来自分类Dev

如何有效地排序R中字符串中的字符?

来自分类Dev

有效地从集合中获取字符串“ startingWith”的子集

来自分类Dev

通过匹配项的数量有效地对字符串匹配进行排名

来自分类Dev

UDF对字符串进行编码在psql和Perl中有效,但在Python中不起作用

来自分类Dev

UDF对字符串进行编码在psql和Perl中有效,但在Python中不起作用

来自分类Dev

测试字符串是否是字符串列表中任何子字符串的有效方法

来自分类Dev

从包含特殊字符的字符串中获取所有子字符串的有效方法

来自分类Dev

C#和SQL Server在字符串是否有效的Base64上存在分歧-正确吗?

来自分类Dev

C#和SQL Server在字符串是否有效的Base64上存在分歧-正确吗?

来自分类Dev

存储包含字符串和int,List或Array的用户输入数据的有效方法?C#

来自分类Dev

如何在R中有效地对字符串中的字母重新排序?

来自分类Dev

基于Ruby on Rails中定义的数组的最有效的按字符串排序的方法

来自分类Dev

给定仅由'('和')'组成的字符串S,找出最长的有效子字符串的长度

来自分类Dev

有没有一种有效的方法来对PHP中的打包字符串进行排序?

来自分类Dev

检查字符串中的数字是否在C#中包含有效年份

来自分类Dev

在C#中根据特定格式从字符串动态构造JSON有效负载

来自分类Dev

C#中解析大型Xml字符串的最有效方法(扩展DTD引用,添加新行等)

来自分类Dev

如何从bbcode帖子中获取有效的子字符串

来自分类Dev

如何从bbcode帖子中获取有效的子字符串

来自分类Dev

Cookie字符串中的有效字符?

Related 相关文章

  1. 1

    在Ruby中对数字和字符串进行排序的有效方法?

  2. 2

    在R中通过索引有效地替换字符串元素

  3. 3

    在R中通过索引有效地替换字符串元素

  4. 4

    检查子字符串的有效方法C#

  5. 5

    在C#中,字符串不是有效的日期时间

  6. 6

    C#字符串未在Parameters.AddWithValue中识别为有效的DateTime

  7. 7

    有效地替换字符串中的子字符串

  8. 8

    有效地在任意索引处对字符串进行分区

  9. 9

    有效地在任意索引处对字符串进行分区

  10. 10

    如何有效地排序R中字符串中的字符?

  11. 11

    有效地从集合中获取字符串“ startingWith”的子集

  12. 12

    通过匹配项的数量有效地对字符串匹配进行排名

  13. 13

    UDF对字符串进行编码在psql和Perl中有效,但在Python中不起作用

  14. 14

    UDF对字符串进行编码在psql和Perl中有效,但在Python中不起作用

  15. 15

    测试字符串是否是字符串列表中任何子字符串的有效方法

  16. 16

    从包含特殊字符的字符串中获取所有子字符串的有效方法

  17. 17

    C#和SQL Server在字符串是否有效的Base64上存在分歧-正确吗?

  18. 18

    C#和SQL Server在字符串是否有效的Base64上存在分歧-正确吗?

  19. 19

    存储包含字符串和int,List或Array的用户输入数据的有效方法?C#

  20. 20

    如何在R中有效地对字符串中的字母重新排序?

  21. 21

    基于Ruby on Rails中定义的数组的最有效的按字符串排序的方法

  22. 22

    给定仅由'('和')'组成的字符串S,找出最长的有效子字符串的长度

  23. 23

    有没有一种有效的方法来对PHP中的打包字符串进行排序?

  24. 24

    检查字符串中的数字是否在C#中包含有效年份

  25. 25

    在C#中根据特定格式从字符串动态构造JSON有效负载

  26. 26

    C#中解析大型Xml字符串的最有效方法(扩展DTD引用,添加新行等)

  27. 27

    如何从bbcode帖子中获取有效的子字符串

  28. 28

    如何从bbcode帖子中获取有效的子字符串

  29. 29

    Cookie字符串中的有效字符?

热门标签

归档