使用 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 个状态更具可读性