假設我們有一個城市串列。每個城市都知道自己的國家。
現在我想要一個隨機國家所有城市的串列,該國家至少有 3 個城市。
我最好的猜測是嘗試用 linq 解決這個問題。我的想法是首先按國家/地區對城市進行分組
List<City> cities = AssumeWeHaveAPopulatedList();
cities.GroupBy(c => c.country)
但是現在,我如何過濾掉那些少于 3 個專案的組呢?
然后我如何選擇一個隨機組并再次取消組合該組以獲得該串列中至少有 3 個城市的隨機國家/地區的所需城市串列?
或者也許有一種不同的方法而不首先按國家對城市進行分組?
uj5u.com熱心網友回復:
您可以使用Count()>= 3 個城市的國家/地區進行過濾并Random選擇一個隨機城市
假設這Country是一個string屬性:
Random r = new Random();
List<IGrouping<string, City>> countryGroups = cities
.GroupBy(c => c.Country)
.Where(cg => cg.Count() >= 3)
.ToList();
IGrouping<string, City> randomCountryCity = countryGroups[r.Next(countryGroups.Count)];
所以現在你有一組隨機的鄉村城市。如果您想將它們展平以獲得該組中的城市,只需使用IEnumerable<City>它已經實作的:
List<City> randomCityList = randomCountryCity.ToList();
旁注:我省略了驗證部分,您必須確保countryGroups包含Any專案,否則您無法訪問隨機專案。
uj5u.com熱心網友回復:
一個組就像一個串列,所以你可以檢查組的數量:
cities.GroupBy(c => c.country).Where(g => g.Count() >=3)
然后,您可以使用 SelectMany 展平組
var result = cities
.GroupBy(c => c.country)
.Where(g => g.Count() >=3)
.SelectMany(g => g)
.ToList();
uj5u.com熱心網友回復:
您可以使用分組串列的計數,如下所示:
var newlist = cities.GroupBy(c => c.country)
.Where(x=>x.Count()>=3)
.Select(x=>new { country=x.Key , CityCount=x.Count()})
.ToList();
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/515621.html
標籤:C#林克
下一篇:For回圈未將所有實體寫入陣列
