按结果排序集合

时间:2012-11-30 17:01:47

标签: c# sorting collections

我编写了一个扩展方法来尝试计算出现在描述中的字符串中的单词。这是功能(例如,搜索“软”我想看到微软所以称它为关键字可能不正确,但我想提前沟通。关键字是当时唯一想到的事情) :

public static int KeywordCount(this string str, string Phrase)
{
    string[] elements = Phrase.ToUpper().Split(' ');
    int count = 0;
    foreach (string element in elements)
    {
        if (str.ToUpper().Contains(element))
            count++;
    }
    return count;
}

我正在尝试查看项目列表,仅包含至少某些内容的项目,但也会根据点击次数对其进行排序(如果所有关键字都在说明中,则需要在顶部等等。

到目前为止我所拥有的是:

 selection.AddRange(all.Where(c => c.Description.KeywordCount(query) > 0));

如何根据KeywordCount的返回值进行排序?我也有一种感觉,我要走的方向将导致KeywordCount搜索每个项目1次,额外1x项目计数> 0,所以如果有办法同时进行比较和排序,我想知道如何。

2 个答案:

答案 0 :(得分:3)

选择首先获取值和计数,然后过滤计数,然后按计数排序,然后仅选择值。

selection.AddRange(
    all.Select(c=>new {Val = c, Count = c.Description.KeywordCount(query))
       .Where(t => t.Count > 0))
       .OrderBy(t => t.Count)
       .Select(t => c.Val);

这样每个项目都会调用一次KeywordCount。

答案 1 :(得分:1)

Linq会订购吗?

List<someType> sorted = all.OrderBy(c => c.Description.KeywordCount(query)).ToList()