我目前正在尝试在C#中实现一个结构,以按给定模式对通用列表进行排序。 具有最佳“得分”的条目位于列表的顶部,第二个条目具有第二大的得分,依此类推。
示例:
搜索时,标题为“Facebook”的对象应该位于列表的顶部,第二个对象将是“Family Fall”,因为它的标题中有两次“Fa”模式。
有没有办法在C#中实现这样的结构? 我试图寻找几种算法,我甚至开始使用Trie结构,目前看起来像这样:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Sprung
{
class WindowTrieNode : IComparable<WindowTrieNode>
{
private String pattern;
private Char character;
private List<WindowTrieNode> followers;
public WindowTrieNode(String pattern, Char character)
{
this.pattern = pattern + character;
this.character = character;
this.followers = new List<WindowTrieNode>();
}
public void addFollower(WindowTrieNode follower) {
if(!hasFollower(follower.getChar())) {
this.followers.Add(follower);
}
}
public bool hasFollowers()
{
return !this.followers.Any();
}
public bool hasFollower(Char character)
{
if (!hasFollowers()) return false;
WindowTrieNode node = new WindowTrieNode(this.pattern + character, character);
return this.followers.Contains(node);
}
public WindowTrieNode getFollower(Char character)
{
WindowTrieNode node = new WindowTrieNode(this.pattern + character, character);
if (hasFollower(character)) return followers.ElementAt(this.followers.IndexOf(node));
return null;
}
public Char getChar()
{
return this.character;
}
public int CompareTo(WindowTrieNode n) {
// Not yet implemented.
return 0;
}
}
}
这是一种正确的方法吗?有更好的方法和解决方案吗? 非常感谢。