Как получить количество различных типов объектов из строки JSON в C # - PullRequest
1 голос
/ 19 сентября 2011

У меня есть строка массива json, содержащая данные:

[{"Name":"John","Age":"22"}, {"Name":"Jack","Age":"56"}, {"Name":"John","Age":"82"}, {"Name":"Jack","Age":"95"}]

Я десериализировал данные и успешно записал их в таблицы данных jquery. Однако теперь я хотел бы добавить в таблицу данных столбец, содержащий количество имен john и имена jack всех в одном столбце. Я могу получить индивидуальный подсчет, сказав в цикле следующее:

if (people[i].Name == "John")
   {
                name_count++;
   }
if (people[i].Name == "Jack")
   {
          name_count2++;
   }

Как мне получить эти данные для отображения в одном столбце, который соответствует либо строке, содержащей имя Джек или Джон? Я использую C #. Заранее спасибо

Ответы [ 2 ]

1 голос
/ 19 сентября 2011

Я бы предложил использовать underscore.js (http://documentcloud.github.com/underscore).. Вы можете легко получить любую карту / уменьшить / выбрать любую, какую захотите. Вот пример:

var people = [{"Name":"John","Age":"22"}, {"Name":"Jack","Age":"56"}, {"Name":"John","Age":"82"}, {"Name":"Jack","Age":"95"}];

var num_johns = _(people).select(function(obj){ 
    return obj.Name === 'John'}).length;

alert(num_johns); //alerts 2

Вы даже можете пойти еще дальше и выделить функцию выбора с помощью небольшого карри http://www.dustindiaz.com/javascript-curry/ - зависит от того, в чем именно заключается ваша проблема.

0 голосов
/ 20 сентября 2011

Вы можете выполнить группировку linq по массиву

    var peeps = from person in people 
        group person by person.name into bucket 
        select new { name = bucket.Key, count = bucket.Count() };

. Это создаст перечисляемый анонимный тип со свойствами name и count, которые вы можете перебирать, чтобы получить имя и количество имен, например:

class Guy
    {
        public int age; public string name;
        public Guy( int age, string name ) {
            this.age = age;
            this.name = name;
        }

    }

    class Program
    {
        static void Main( string[] args ) {
            var GuyArray = new Guy[] { 
            new Guy(22,"John"),new Guy(25,"John"),new Guy(27,"John"),new Guy(29,"John"),new Guy(12,"Jack"),new Guy(32,"Jack"),new Guy(52,"Jack"),new Guy(100,"Abe")};

        var peeps = from f in GuyArray group f by f.name into g select new { name = g.Key, count = g.Count() };

            foreach ( var record in peeps ) {
                Console.WriteLine( record.name + " : " + record.count );
            }

        }
    }

Издаст:

John : 4
Jack : 3
Abe : 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...