将列表转换为字典(键的映射和筛选的列表作为值)

Sri*_*ist 0 c# lambda c#-4.0

class Animal
    {
        public FoodTypes Food { get;set;} 
        public string Name { get; set; }
    }
    enum FoodTypes
    {
        Herbivorous,
        Carnivorous
    }

    class Util
    {
        public static Dictionary<FoodTypes,List<Animal>> GetAnimalListBasedOnFoodType(List<Animal> animals)
        {
            Dictionary<FoodTypes, List<Animal>> map = new Dictionary<FoodTypes, List<Animal>>();
            var foodTypes = animals.Select(o => o.Food).Distinct();
            foreach(var foodType in foodTypes)
            {
                if (!map.ContainsKey(foodType))
                    map.Add(foodType, null);
                map[foodType] = animals.Where(o => o.Food == foodType).ToList();
            }
            return map;
        }
    }
Run Code Online (Sandbox Code Playgroud)

上面的代码是为了了解我想要实现的目标.现在,问题是 是否有可能在单个lambda表达式中实现GetAnimalListBasedOnFoodType的功能?

MFa*_*MAR 5

干得好 :)

public static Dictionary<FoodTypes, List<Animal>> GetAnimalListBasedOnFoodType(List<Animal> animals)
{
    return animals
        .GroupBy(animal => animal.Food)
        .ToDictionary(
            group => group.Key,
            group => group.ToList());
}
Run Code Online (Sandbox Code Playgroud)