示例#1
0
 public Country_stat(Country_row inp)
 {
     country           = inp.country;
     sum_count         = 0;
     uniq_user_id_rows = new List <Country_row>();
     Add(inp);
 }
示例#2
0
 public void Add(Country_row what)
 {
     if (what.country == country)
     {
         if (!uniq_user_id_rows.Any(c => c.user_id == what.user_id))
         {
             uniq_user_id_rows.Add(what);
         }
         sum_count += what.count;
     }
 }
示例#3
0
        static void Main(string[] args)
        {
            //сразу будем собирать статистику
            List <Country_stat> stat = new List <Country_stat>();

            using (TextReader reader = new StreamReader("input.txt", Encoding.Default))
            {
                string str;
                while ((str = reader.ReadLine()) != null)
                {
                    //помучаемся, используя только базовые типы (изобретаем велосипед)

                    String[] delims = str.Split(';');
                    if (delims.Count() != 3)
                    {
                        Console.WriteLine("Строка \"" + str + "\" не содержит нужное количество данных");
                        continue;
                    }
                    else
                    {
                        //дробим дальше
                        Country_row temp_row = new Country_row();
                        var         props    = typeof(Country_row).GetFields();

                        //проверяем все поля,
                        bool fields_ok = true;
                        for (int i = 0; i < 3; i++)
                        {
                            if (i == 0 || i == 1)
                            {
                                if (Int32.TryParse(delims[i], out int outt))
                                {
                                    typeof(Country_row).GetField(props[i].Name).SetValue(temp_row, outt);
                                }
                                else
                                {
                                    fields_ok = false;
                                    Console.WriteLine("Поле \"" + delims[i] + "\" в строке \"" + str + "" + "\" нельзя привести к числу");
                                    break;
                                }
                            }
                            else
                            {
                                //Здесь, по хорошему, нужно подключить библиотеку для распознавания стран
                                temp_row.country = delims[i];
                            }
                        }
                        //и, если эти поля нормальные, учитываем их
                        if (fields_ok)
                        {
                            //stringBuilder, конечно, не базовый, но здесь правильно будет его использовать, чтобы собрать строку, а не перезаписывать ее
                            StringBuilder sb = new StringBuilder();
                            foreach (var item in props)
                            {
                                sb.Append(String.Join(" ", new String[] { item.Name, typeof(Country_row).GetField(item.Name).GetValue(temp_row).ToString() }) + "; ");
                            }
                            Console.WriteLine(sb.ToString());

                            //добавляем к статистике
                            var finded = stat.Find(c => (c.country == temp_row.country));
                            if (finded != null)
                            {
                                finded.Add(temp_row);
                            }
                            else //если нет страны в статистике, то добавляем
                            {
                                stat.Add(new Country_stat(temp_row));
                            }
                        }
                    }
                }
            }

            //печать статистики
            StringBuilder sb2 = new StringBuilder();

            foreach (var item in stat)
            {
                sb2.Append(String.Join(" ", new String[] { item.country, item.sum_count.ToString(), item.uniq_user_id_rows.Count().ToString() }) + "\n");
            }
            Console.WriteLine(sb2.ToString());

            Console.ReadKey();
        }