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()代码>