Сохраняйте данные в алфавитном порядке (A - D, E - H, I - L и т. Д.), Используя словарь - PullRequest
1 голос
/ 19 октября 2011

Я использую Entity Framework, и я хотел бы сохранить общее количество элементов в пределах определенного набора букв (если это имеет смысл):

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.

Допустим, мой модельный объект состоит из Id и Title и что он называется 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);
    }
}

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 19 октября 2011

это то, что вы хотите:

    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 "";
    }
1 голос
/ 19 октября 2011

вы должны использовать список в качестве значения словаря:

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 "";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...