Список массивов в С# без цикла

65
7

Мне нравится знать, как инициализировать массив без циклов вроде for, foreach или LINQ.

Из следующего кода необходимо найти под 2 м длины машины внутри.Netframework с помощью консольного приложения.

{
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;

}

Он имеет два класса следующим образом.

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();
}
}

Не могли бы вы дать мне знать, как это решить. Заранее спасибо.

спросил(а) 2021-01-19T16:39:31+03:00 9 месяцев назад
1
Решение
112

Ну, в первую очередь вам следует использовать общий список 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();
}

Обратите внимание, что метод не изменяет исходный список, но создает новый список.

ответил(а) 2021-01-19T16:39:31+03:00 9 месяцев назад
47

Используйте метод статического Adapter в ArrayList

CarType = ArrayList.Adapter(CarList);

Но это, вероятно, использует цикл внутри, вы не можете уйти от них, но, по крайней мере, это скрывает их.

ответил(а) 2021-01-19T16:39:31+03:00 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема