C# 为c中的每个属性使用优先级编号(权重)的对象排序列表#

C# 为c中的每个属性使用优先级编号(权重)的对象排序列表#,c#,sorting,C#,Sorting,我有一个如下声明的列表,我想根据每个名称的权重属性对列表进行排序。这可能非常简单,但请原谅,我被困在这里以最好的方式进行排序 public class A { public float x; public string name; public A(float x, string name) { this.x = x; this.name = name; } List<A> allAs = new List<A>(); allAs.A

我有一个如下声明的列表,我想根据每个名称的权重属性对列表进行排序。这可能非常简单,但请原谅,我被困在这里以最好的方式进行排序

public class A
{
    public float x;
    public string name;

public A(float x, string name)
{
    this.x = x;
    this.name = name;
}

List<A> allAs = new List<A>();

allAs.Add(new A(10, "CAR"));
allAs.Add(new A(22, "BUS"));
allAs.Add(new A(100, "TRAIN"));
allAs.Add(new A(0, "HYPERLOOP"));
排序后的列表应打印如下:

name - x
HYPERLOOP- 0,
TRAIN - 100,
CAR - 10,
BUS - 22

名称/重量排序
-字典

List<A> allAs = new List<A>();
allAs.Add(new A(10, "CAR"));
allAs.Add(new A(22, "BUS"));
allAs.Add(new A(100, "TRAIN"));
allAs.Add(new A(0, "HYPERLOOP"));

Dictionary<string, int> nameweight = new Dictionary<string, int>() 
{
    { "HYPERLOOP", 1 }, 
    { "TRAIN", 2 }, 
    { "CAR", 3 }, 
    { "BUS", 4 }
};
allAs = allAs.OrderBy(x => nameweight[x.name]).ToList();
        SortedDictionary<int, A> dict = new SortedDictionary<int, A>()
        {
            {1, new A(0, "HYPERLOOP")},
            {2, new A(100, "TRAIN")}
            \\...
        };

列表

名称/重量排序
-字典

List<A> allAs = new List<A>();
allAs.Add(new A(10, "CAR"));
allAs.Add(new A(22, "BUS"));
allAs.Add(new A(100, "TRAIN"));
allAs.Add(new A(0, "HYPERLOOP"));

Dictionary<string, int> nameweight = new Dictionary<string, int>() 
{
    { "HYPERLOOP", 1 }, 
    { "TRAIN", 2 }, 
    { "CAR", 3 }, 
    { "BUS", 4 }
};
allAs = allAs.OrderBy(x => nameweight[x.name]).ToList();
        SortedDictionary<int, A> dict = new SortedDictionary<int, A>()
        {
            {1, new A(0, "HYPERLOOP")},
            {2, new A(100, "TRAIN")}
            \\...
        };

List

我认为您需要在A类中添加另一个字段,因为您似乎没有按名称或X排序。例如:

    public class A
{
    public float x;
    public string name;
    public int weight;

public A(float x, string name, int weight)
{
    this.x = x;
    this.name = name;
    this.weight = weight;
}

List<A> allAs = new List<A>();

allAs.Add(new A(10, "CAR", 3));
allAs.Add(new A(22, "BUS", 4));
allAs.Add(new A(100, "TRAIN", 2));
allAs.Add(new A(0, "HYPERLOOP", 1));

我认为您需要在A类中添加另一个字段,因为您似乎没有按名称或X排序。例如:

    public class A
{
    public float x;
    public string name;
    public int weight;

public A(float x, string name, int weight)
{
    this.x = x;
    this.name = name;
    this.weight = weight;
}

List<A> allAs = new List<A>();

allAs.Add(new A(10, "CAR", 3));
allAs.Add(new A(22, "BUS", 4));
allAs.Add(new A(100, "TRAIN", 2));
allAs.Add(new A(0, "HYPERLOOP", 1));
使用分类词典

List<A> allAs = new List<A>();
allAs.Add(new A(10, "CAR"));
allAs.Add(new A(22, "BUS"));
allAs.Add(new A(100, "TRAIN"));
allAs.Add(new A(0, "HYPERLOOP"));

Dictionary<string, int> nameweight = new Dictionary<string, int>() 
{
    { "HYPERLOOP", 1 }, 
    { "TRAIN", 2 }, 
    { "CAR", 3 }, 
    { "BUS", 4 }
};
allAs = allAs.OrderBy(x => nameweight[x.name]).ToList();
        SortedDictionary<int, A> dict = new SortedDictionary<int, A>()
        {
            {1, new A(0, "HYPERLOOP")},
            {2, new A(100, "TRAIN")}
            \\...
        };
SortedDictionary dict=新的SortedDictionary()
{
{1,新的A(0,“超循环”)},
{2,新A(100,“火车”)}
\\...
};
使用分类词典

List<A> allAs = new List<A>();
allAs.Add(new A(10, "CAR"));
allAs.Add(new A(22, "BUS"));
allAs.Add(new A(100, "TRAIN"));
allAs.Add(new A(0, "HYPERLOOP"));

Dictionary<string, int> nameweight = new Dictionary<string, int>() 
{
    { "HYPERLOOP", 1 }, 
    { "TRAIN", 2 }, 
    { "CAR", 3 }, 
    { "BUS", 4 }
};
allAs = allAs.OrderBy(x => nameweight[x.name]).ToList();
        SortedDictionary<int, A> dict = new SortedDictionary<int, A>()
        {
            {1, new A(0, "HYPERLOOP")},
            {2, new A(100, "TRAIN")}
            \\...
        };
SortedDictionary dict=新的SortedDictionary()
{
{1,新的A(0,“超循环”)},
{2,新A(100,“火车”)}
\\...
};

这些“重量”存储在哪里?目前没有存储位置,考虑将它们存储为一个字典。如果您可以使用
linq
执行以下操作:
List b=a.OrderBy(x=>x.x)。ThenBy(x=>x.y)。ToList()这些“权重”存储在哪里?目前没有存储位置,考虑将它们存储为dictif,您可以使用
linq
执行以下操作:
List b=a.OrderBy(x=>x.x).ThenBy(x=>x.y).ToList()