C#排序列表-快速,带可移动重复键

C#排序列表-快速,带可移动重复键,c#,list,sorting,C#,List,Sorting,我正在制作一个带有压缩机制的应用程序,需要自己的字典。我的应用程序中的每个cicle都会将新元素添加到myDictionary中并进行更新(在myDictionary中以前的一些元素中添加一个字符)。我是用普通的列表和快速排序功能来做的,但是速度非常慢。我正在寻找一些新的方法如何做到这一点,但分类列表,字典或查找似乎不是我要找的。制作自己的分类列表更好还是太难/太复杂而难以管理 部分代码: public class MyDictionary { private List<strin

我正在制作一个带有压缩机制的应用程序,需要自己的字典。我的应用程序中的每个cicle都会将新元素添加到myDictionary中并进行更新(在myDictionary中以前的一些元素中添加一个字符)。我是用普通的列表和快速排序功能来做的,但是速度非常慢。我正在寻找一些新的方法如何做到这一点,但分类列表,字典或查找似乎不是我要找的。制作自己的分类列表更好还是太难/太复杂而难以管理

部分代码:

public class MyDictionary
{
    private List<string> Contexts;
    private List<string> Contents;
    private int Count;  //words count

    //Konstruktor
    public MyDictionary()
    {
        Count = 0;
        Contexts = new List<string>();
        Contents = new List<string>();
    }
公共类MyDictionary
{
私有列表上下文;
私有列表内容;
私有整数计数;//字数计数
//康斯特鲁克托
公共MyDictionary()
{
计数=0;
上下文=新列表();
Contents=新列表();
}
区域公共职能
public void AddChar(char ch,int contentSize)
{
for(int i=0;iif(i这里有一个类,它的作用类似于一个
SortedDictionary
,但可以用同一个键保存多个值。您可能需要稍微充实一下,使用
Remove
之类的方法,并在需要时添加对自己的
IComparer
的支持

公共类SortedMultiValue:IEnumerable
{
专用分类词典数据;
公共分类多值()
{
_数据=新的SortedDictionary();
}
公共空间清除()
{
_data.Clear();
}
公共无效添加(TKey键,TValue值)
{
if(!\u data.TryGetValue(输入、输出列表项))
{
项目=新列表();
_数据。添加(关键、项目);
}
增加(价值);
}
公共IEnumerable Get(TKey)
{
if(_data.TryGetValue(输入、输出列表项))
{
退货项目;
}
抛出新的KeyNotFoundException();
}
公共IEnumerator GetEnumerator()
{
返回CreateEnumerable().GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
返回CreateEnumerable().GetEnumerator();
}
IEnumerable CreateEnumerable()
{
foreach(在_data.values中的IEnumerable值)
{
foreach(值中的TValue值)
{
收益回报值;
}
}
}
}
您可以这样使用它:

var data = new SortedMultiValue<string, string>();

data.Add("Dog", "Buddy");
data.Add("Dog", "Mr. Peanutbutter");
data.Add("cat", "Charlie");
data.Add("cat", "Sam");
data.Add("cat", "Leo");

foreach (string item in data)
{
    Console.WriteLine(item);
}

Console.WriteLine();
foreach (string item in data.Get("cat"))
{
    Console.WriteLine(item);
}

Console.WriteLine();
foreach (string item in data.Get("Dog"))
{
    Console.WriteLine(item);
}
var data=new SortedMultiValue();
数据。添加(“狗”、“伙伴”);
数据。添加(“狗”、“花生酱先生”);
数据。添加(“cat”、“Charlie”);
数据。添加(“cat”、“Sam”);
数据。添加(“cat”、“Leo”);
foreach(数据中的字符串项)
{
控制台写入线(项目);
}
Console.WriteLine();
foreach(data.Get(“cat”)中的字符串项)
{
控制台写入线(项目);
}
Console.WriteLine();
foreach(data.Get(“Dog”)中的字符串项)
{
控制台写入线(项目);
}
它将此作为输出(注意,第一组名称按插入时使用的键排序):

查理
萨姆
狮子座
好友
花生酱先生

查理
萨姆
狮子座

好友
花生酱先生


这里有一个类,它的作用类似于一个
SortedDictionary
,但可以用同一个键保存多个值。您可能需要使用
Remove
等方法对其进行一些充实,并在需要时添加对自己的
IComparer
的支持

公共类SortedMultiValue:IEnumerable
{
专用分类词典数据;
公共分类多值()
{
_数据=新的SortedDictionary();
}
公共空间清除()
{
_data.Clear();
}
公共无效添加(TKey键,TValue值)
{
if(!\u data.TryGetValue(输入、输出列表项))
{
项目=新列表();
_数据。添加(关键、项目);
}
增加(价值);
}
公共IEnumerable Get(TKey)
{
if(_data.TryGetValue(输入、输出列表项))
{
退货项目;
}
抛出新的KeyNotFoundException();
}
公共IEnumerator GetEnumerator()
{
返回CreateEnumerable().GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
返回CreateEnumerable().GetEnumerator();
}
IEnumerable CreateEnumerable()
{
foreach(在_data.values中的IEnumerable值)
{
foreach(值中的TValue值)
{
收益回报值;
}
}
}
}
您可以这样使用它:

var data = new SortedMultiValue<string, string>();

data.Add("Dog", "Buddy");
data.Add("Dog", "Mr. Peanutbutter");
data.Add("cat", "Charlie");
data.Add("cat", "Sam");
data.Add("cat", "Leo");

foreach (string item in data)
{
    Console.WriteLine(item);
}

Console.WriteLine();
foreach (string item in data.Get("cat"))
{
    Console.WriteLine(item);
}

Console.WriteLine();
foreach (string item in data.Get("Dog"))
{
    Console.WriteLine(item);
}
var data=new SortedMultiValue();
数据。添加(“狗”、“伙伴”);
数据。添加(“狗”、“花生酱先生”);
数据。添加(“cat”、“Charlie”);
数据。添加(“cat”、“Sam”);
数据。添加(“cat”、“Leo”);
foreach(数据中的字符串项)
{
控制台写入线(项目);
}
Console.WriteLine();
foreach(data.Get(“cat”)中的字符串项)
{
控制台写入线(项目);
}
Console.WriteLine();
foreach(data.Get(“Dog”)中的字符串项)
{
控制台写入线(项目);
}
它将此作为输出(注意,第一组名称按插入时使用的键排序):

查理
萨姆
狮子座
好友
花生酱先生

查理
萨姆
狮子座

好友
花生酱先生


代码在哪里?您遇到了什么异常?请与我们共享一些代码。不清楚您试图用代码更新什么…我只想
var data = new SortedMultiValue<string, string>();

data.Add("Dog", "Buddy");
data.Add("Dog", "Mr. Peanutbutter");
data.Add("cat", "Charlie");
data.Add("cat", "Sam");
data.Add("cat", "Leo");

foreach (string item in data)
{
    Console.WriteLine(item);
}

Console.WriteLine();
foreach (string item in data.Get("cat"))
{
    Console.WriteLine(item);
}

Console.WriteLine();
foreach (string item in data.Get("Dog"))
{
    Console.WriteLine(item);
}