0

我想在 List 上进行排序,例如:

public List<Person> personList { get; set; };    

class Person
{
    public string Name{ get; set; };
    public List<Car> carList{ get; set; };
}

class Car
{
    public string Name { get; set; };
    public int PriceInMillions { get; set; };
}

我想对列表顶部的CarList每一个PersonList进行CarList排序?BMW object(can be one or more)

输入:

Person: Name: 'ABC'
List<Car>:{{"x",25},{"y",25},{"BMW",26},{"x",25},{"BMW",25}}

Person: Name: 'DEF'
List<Car>:{{"BMW",21},{"y",25},{"BMW",26},{"x",25},{"BMW",20}}

所需输出:

Person: Name: 'ABC'
List<Car>:{{"BMW",25},{"BMW",26},{"x",25},{"y",25},{"x",25}}

Person: Name: 'DEF'
List<Car>:{{"BMW",20},{"BMW",21},{"BMW",26},{"y",25},{"x",25}}

我试图找到“BMW”的索引并将其与第一个索引交换,但它不起作用。

4

3 回答 3

1
List<Car> orderedCarList = person.carList.OrderBy(s => (s.Name == "BMW") ? 0 : 1).ToList();
person.carList = orderedCarList;
于 2012-11-27T12:55:06.653 回答
0

这是工作解决方案:

public List<Person> GetSortedList(List<Person> personList)
{
   foreach (var person in personList)
   {
       person.CarList=person.CarList.OrderByDescending(x => x.Name== "BMW").ToList();
   }
 return personList;
}
于 2012-11-28T06:27:18.877 回答
0

如果您想就地排序,而不为每个人创建新列表或汽车,您可以这样做

foreach(Person p in personList)
{
    p.carList.Sort((car1, car2) =>
        -(car1.Name == "BMW").CompareTo(car2.name == "BMW"));
}
于 2012-11-27T15:45:10.937 回答