使用 linq 检查列表的数量是否相符
Check if tie in count of lists using linq
州有城市。只有在没有领带的情况下,我才需要拥有大多数城市的州。平局意味着前 2 个州拥有相同数量的城市。
var stateWithMostCities = _states
.OrderByDescending(_p => _p.cities.Count())
.Take(2)
.ToList();
现在我可以检查第一个州的城市计数是否 = 第二个州并确定是否有平局。但是我想问这是否可以在上面显示的同一行上使用 takewhile、skip 和 linq 的其他创造性用途来实现。谢谢
是这样的吗?
var stateWithMostCitiesWithoutATie =_states.GroupBy(_p => _p.cities.Count())
.OrderByDescending(g=>g.Key)
.FirstOrDefault(g=> g.Count()==1? g.First():null);
关键是,正如@Mong Zhu指出的,按城市数分组,然后你可以按desc排序得到最大值,如果最大值组有多个,那么你就平局
从技术上讲,您可以在有序状态上使用 Aggregate
:
// the state with maximum cities; null in case of tie
var stateWithMostCities = _states
.OrderByDescending(state => state.cities.Count())
.Take(2) // at most 2 items to analyze
.Aggregate((s, a) => s.cities.Count() == a.cities.Count() ? null : s);
但我怀疑你是否应该这样做:比较前 2
个状态更具可读性。
州有城市。只有在没有领带的情况下,我才需要拥有大多数城市的州。平局意味着前 2 个州拥有相同数量的城市。
var stateWithMostCities = _states
.OrderByDescending(_p => _p.cities.Count())
.Take(2)
.ToList();
现在我可以检查第一个州的城市计数是否 = 第二个州并确定是否有平局。但是我想问这是否可以在上面显示的同一行上使用 takewhile、skip 和 linq 的其他创造性用途来实现。谢谢
是这样的吗?
var stateWithMostCitiesWithoutATie =_states.GroupBy(_p => _p.cities.Count())
.OrderByDescending(g=>g.Key)
.FirstOrDefault(g=> g.Count()==1? g.First():null);
关键是,正如@Mong Zhu指出的,按城市数分组,然后你可以按desc排序得到最大值,如果最大值组有多个,那么你就平局
从技术上讲,您可以在有序状态上使用 Aggregate
:
// the state with maximum cities; null in case of tie
var stateWithMostCities = _states
.OrderByDescending(state => state.cities.Count())
.Take(2) // at most 2 items to analyze
.Aggregate((s, a) => s.cities.Count() == a.cities.Count() ? null : s);
但我怀疑你是否应该这样做:比较前 2
个状态更具可读性。