【问题标题】:Store data within alphabetically ordered letters (A - D, E - H, I - L, etc) using Dictionary使用字典将数据存储在按字母顺序排列的字母(A - D、E - H、I - L 等)中
【发布时间】:2011-12-10 13:07:13
【问题描述】:

我正在使用实体框架,我想将项目的总数存储在一组特定字母的范围内(如果这有意义的话):

A - D (12) - (where 12 is the total amount and the data falls between letters A and D).
E - H (24)
I - L (9)
M - P (62)
Q - T (18)
U - Z (0)

我不太确定如何使用 Dictionary 来做到这一点。

假设我的模型对象由IdTitle 组成,它被称为Discount

目前,我有以下内容:

List<Discount> discounts = new List<Discount>();
Dictionary<string, Discount> dict = new Dictionary<string, Discount>();
foreach (DiscountDTO discount in discounts)
{
    if (discount.Title.StartsWith("A") ||
        discount.Title.StartsWith("B") ||
        discount.Title.StartsWith("C") ||
        discount.Title.StartsWith("D"))
    {
        dict.Add("A - D", discount);
    } else if (discount.Title.StartsWith("E") ||
        discount.Title.StartsWith("F") ||
        discount.Title.StartsWith("G") ||
        discount.Title.StartsWith("H"))
    {
        dict.Add("E - H", discount);
    } else if (discount.Title.StartsWith("I") ||
        discount.Title.StartsWith("J") ||
        discount.Title.StartsWith("K") ||
        discount.Title.StartsWith("L"))
    {
        dict.Add("I - L", discount);
    } else if (discount.Title.StartsWith("M") ||
        discount.Title.StartsWith("N") ||
        discount.Title.StartsWith("O") ||
        discount.Title.StartsWith("P"))
    {
        dict.Add("M - P", discount);
    } else if (discount.Title.StartsWith("Q") ||
        discount.Title.StartsWith("R") ||
        discount.Title.StartsWith("S") ||
        discount.Title.StartsWith("T"))
    {
        dict.Add("Q - T", discount);
    } else if (discount.Title.StartsWith("U") ||
        discount.Title.StartsWith("V") ||
        discount.Title.StartsWith("W") ||
        discount.Title.StartsWith("X") ||
        discount.Title.StartsWith("Y") ||
        discount.Title.StartsWith("Z"))
    {
        dict.Add("U - Z", discount);
    }
}

提前致谢。

【问题讨论】:

    标签: c# asp.net linq entity-framework list


    【解决方案1】:

    这是你想要的吗:

        static void Main(string[] args)
        {
    
        List<Discount> list = new List<Discount>();
        list.Add(new Discount { Id = 1, Title = "Adam" });
        list.Add(new Discount { Id = 2, Title = "Ben" });
        list.Add(new Discount { Id = 3, Title = "Alex" });
        list.Add(new Discount { Id = 4, Title = "Daniel" });
        list.Add(new Discount { Id = 5, Title = "Ethan" });
        list.Add(new Discount { Id = 6, Title = "Howard" });
        list.Add(new Discount { Id = 7, Title = "Peter" });
        list.Add(new Discount { Id = 8, Title = "Tazz" });
        list.Add(new Discount { Id = 9, Title = "Steve" });
        list.Add(new Discount { Id = 10, Title = "Lyle" });
    
        var query = list.GroupBy(d => GetRange(d.Title));
    
        foreach (var group in query)
            Console.WriteLine("{0}[{1}]", group.Key, group.Count());
        }
    
        static string GetRange(string s)
        {
            char c = s.ToLower()[0];
            if (c >= 'a' && c <= 'd')
                return "A - D";
            else if (c >= 'e' && c <= 'h')
                return "E - H";
            else if (c >= 'i' && c <= 'l')
                return "I - L";
            else if (c >= 'm' && c <= 'p')
                return "M - P";
            else if (c >= 'q' && c <= 't')
                return "Q - T";
            else if (c >= 'u' && c <= 'z')
                return "U - Z";
            return "";
        }
    

    【讨论】:

    • 排序我所追求的,但是我需要能够返回某种字典。
    【解决方案2】:

    您应该使用 List 作为字典的值:

    static void Main(string[] args)
    {
    
        List<Discount> list = new List<Discount>();
        list.Add(new Discount { Id = 1, Title = "Adam" });
        list.Add(new Discount { Id = 2, Title = "Ben" });
        list.Add(new Discount { Id = 3, Title = "Alex" });
        list.Add(new Discount { Id = 4, Title = "Daniel" });
        list.Add(new Discount { Id = 5, Title = "Ethan" });
        list.Add(new Discount { Id = 6, Title = "Howard" });
        list.Add(new Discount { Id = 7, Title = "Peter" });
        list.Add(new Discount { Id = 8, Title = "Tazz" });
        list.Add(new Discount { Id = 9, Title = "Steve" });
        list.Add(new Discount { Id = 10, Title = "Lyle" });
    
        Dictionary<string, List<Discount>> dic = new Dictionary<string, List<Discount>>();
        foreach (Discount d in list)
        {
            string range = GetRange(d.Title);
            if (dic.ContainsKey(range))
                dic[range].Add(d);
            else
                dic.Add(range, new List<Discount> { d });
        }
    }
    
    static string GetRange(string s)
    {
        char c = s.ToLower()[0];
        if (c >= 'a' && c <= 'd')
            return "A - D";
        else if (c >= 'e' && c <= 'h')
            return "E - H";
        else if (c >= 'i' && c <= 'l')
            return "I - L";
        else if (c >= 'm' && c <= 'p')
            return "M - P";
        else if (c >= 'q' && c <= 't')
            return "Q - T";
        else if (c >= 'u' && c <= 'z')
            return "U - Z";
        return "";
    }
    

    【讨论】:

    • 这正是我所追求的。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    • 2023-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多