0

for、foreach、LINQなどのループなしで配列を初期化する方法を知りたいです。

次のコードから、コンソールアプリケーションを使用して.Netframework内の2m未満の長さの車を見つける必要があります。

{
    ArrayList = CarType new ArrayList();

    CarType.Add(new CarList("Ford"));
    ((CarList)CarType[0]).Cars.Add(new Car("Focus", 2));
    ((CarList)CarType[0]).Cars.Add(new Car("Fiesta", 1));

    CarType.Add(new CarList("Peugeout"));
    ((CarList)CarType[1]).Cars.Add(new Car("206", 1));
    ((CarList)CarType[1]).Cars.Add(new Car("407", 2));

    RemoveLargeCars(CarType);
}


public static ArrayList RemoveLargeCars (ArrayList CarType)
{
    //Array List should be here
    return CarType;

}

次の2つのクラスがあります。

class Car
{
    public string name;
    public float length;

    public Car(string newName, float newLength)
    {
        this.name = newName;
        this.length = newLength;
    }
}

Class CarList
{
    public string CarType;
    public ArrayList Pipes;

    public CarList(string newCarType)
    {
        carType = newCarType;
        Cars = new ArrayList();
    }
}

これを解決する方法を教えてください。前もって感謝します。

4

2 に答える 2

0

静的Adapterメソッドを使用するArrayList

CarType = ArrayList.Adapter(CarList);

しかし、それはおそらく内部でループを使用しているので、それらから逃れることはできませんが、少なくともこれはそれらを隠します。

于 2012-05-19T06:58:19.367 に答える
0

まず第一に、 のList<T>代わりに一般的なリスト型を使用する必要ArrayListがあります。これにより、コードがより単純になります。(そして、パブリック フィールドではなくプロパティを推奨するベスト プラクティス):

class Car {

  public string Name { get; set; }
  public float Length { get; set; }

  public Car(string newName, float newLength) {
    Name = newName;
    Length = newLength;
  }

}

class CarList {

  public string CarType { get; set; }
  public List<Car> Cars { get; set; }

  public CarList(string newCarType, List<Car> newCars) {
    CarType = newCarType;
    Cars = newCars;
  }

  public CarList(string newCarType) : this(newCarType, new List<Car>()) {}

}

を使用しますList<CarList>

List<CarList> CarType = new List<CarList>();

CarList ford = new CarList("Ford");
CarType.Add(ford);
ford.Cars.Add(new Car("Focus", 2));
ford.Cars.Add(new Car("Fiesta", 1));

CarList peugeot = new CarList("Peugeout");
CarType.Add(peugeot);
peugeot.Cars.Add(new Car("206", 1));
peugeot.Cars.Add(new Car("407", 2));

List<CarList> smallCars = RemoveLargeCars(CarType);

拡張メソッドを使用して、条件に基づいて車を簡単に除外できます。

public static List<CarList> RemoveLargeCars(List<CarList> CarType) {
  return CarType.Select(
    t => new CarList(t.CarType, t.Cars.Where(c => c.Length < 2f).ToList() 
  ) .ToList();
}

このメソッドは元のリストを変更せず、新しいリストを作成することに注意してください。

于 2012-05-19T08:21:55.657 に答える