/// <summary> /// Filter a list of stations with parameters /// </summary> /// <param name="stations">List of stations to filter through</param> /// <param name="filter">Filter configuration</param> /// <returns>True, if atleast one station matching the filters was found</returns> public static bool Filter(this IEnumerable <Station> stations, StationSearchFilter filter, out List <Station> result) { result = new List <Station>(stations); List <Station> remove = new List <Station>(); if (filter.Type != null) { remove.AddRange(result.Where(station => station.Type != filter.Type.Value)); result.RemoveClear(result); } if (filter.Facility != null) { remove.AddRange(result.Where(station => !station.HasFacility(filter.Facility.Value))); result.RemoveClear(result); } if (filter.MinPadSize != null) { remove.AddRange(result.Where(station => !station.CanLand(filter.MinPadSize.Value))); result.RemoveClear(result); } return(result.Count > 0); }
/// <summary> /// Filters stations in a list of systems /// </summary> /// <param name="systems">Enumerable to filter through</param> /// <param name="systemFilter">system filter to apply</param> /// <param name="stationFilter">station filter to apply</param> /// <param name="result">a resulting new List with all stations</param> /// <returns></returns> public static bool FilterStations(this IEnumerable <StarSystem> systems, SystemSearchFilter systemFilter, StationSearchFilter stationFilter, out List <Station> result) { result = new List <Station>(); if (systems.Filter(systemFilter, out var validSystems)) { foreach (StarSystem system in validSystems) { if (system.FilterStations(stationFilter, out List <Station> stations)) { result.AddRange(stations); } } return(result.Count > 0); } else { return(false); } }