0

次のようなリストで注文したい:

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それぞれ並べ替えたいですか?PersonListCarListBMW 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

一人一人に新しいリストや車を作成せずに、その場で並べ替えたい場合は、次のことができます。

foreach(Person p in personList)
{
    p.carList.Sort((car1, car2) =>
        -(car1.Name == "BMW").CompareTo(car2.name == "BMW"));
}
于 2012-11-27T15:45:10.937 に答える
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 に答える