C#:使用Hashtable实现输出那些用户发表主题最多的信息

构思:先计算各自的数量,那些数量最多,输出详细信息

具体算法如下:

    public class Count
    {
        #region 计算各实体数量
        public static Hashtable EntityCount(DataTable dt, string clmnUid)
        {
            //List<string> lst = new List<string>();
            Hashtable uidsCount = new Hashtable();

            foreach( DataRow row in dt.Rows)
            {
                string uid = row[clmnUid].ToString();
                if (uidsCount.Contains(uid))
                {
                    uidsCount[uid] = (int)uidsCount[uid] + 1;
                }
                else
                {
                    uidsCount.Add(uid,1);
                }
            }
            return uidsCount;
        }
        #endregion

        #region 获取数量最多的实体

        public static IList<string> MaxCountUid(Hashtable uidsCount,bool listResult)
        {
            int maxCount = 0;
            IList<string> uids = new List<string>();
            int value = 0;
            foreach (DictionaryEntry kv in uidsCount)
            {
                value = (int)kv.Value;
                if (value > maxCount)
                {
                    maxCount = value;
                    uids.Clear();
                    uids.Add(kv.Key.ToString());
                }
                else if(value == maxCount)
                {
                    uids.Add(kv.Key.ToString());
                }
            }
            return uids;
        }

        public static Hashtable MaxCountUid(Hashtable uidsCount)
        {
            int maxCount = 0;
            Hashtable uids = new Hashtable();
            int value = 0;
            foreach (DictionaryEntry kv in uidsCount)
            {
                value = (int)kv.Value;
                if (value > maxCount)
                {
                    maxCount = value;
                    uids.Clear();
                    uids.Add(kv.Key,kv.Value);
                }
                else if (value == maxCount)
                {
                    uids.Add(kv.Key, kv.Value);
                }
            }
            return uids;
        }

        #endregion

        #region 输出用户的ID、姓名、数量

        public static void PrintMaxCountName(IList<string> uids,DataTable users, string clmnUid, string clmnName)
        {
            foreach(DataRow dr in users.Rows)
            {
                string strUid = dr[clmnUid].ToString();
                foreach(string uid in uids)
                {
                    if (uid == strUid)
                    {
                        string strName = dr[clmnName].ToString();
                        Console.WriteLine(strUid + ":" + strName);
                    }
                }
            }
        }

        public static void PrintMaxCountName(Hashtable uids, DataTable users, string clmnUid, string clmnName)
        {
            foreach (DataRow dr in users.Rows)
            {
                string strUid = dr[clmnUid].ToString();
                foreach (DictionaryEntry kv in uids)
                {
                    if (kv.Key.ToString() == strUid)
                    {
                        string strName = dr[clmnName].ToString();
                        Console.WriteLine(strUid + ":" + strName +"(" + kv.Value.ToString() + ")");
                    }
                }
            }
        }

        #endregion
    }

构造测试数据:

    public class Data
    {
        private string[] usersColumns = { "uid", "name" };
        private string[] subjectsColumns = { "title", "uid", "time" };

        public DataTable initUsers()
        {
            DataTable users = new DataTable();
            foreach (string columnName in usersColumns)
            {
                users.Columns.Add(columnName);
            }

            for (int i = 0; i < 10;i++ )
            {
                users.Rows.Add("uid"+i,"name"+i);
            }

            return users;
        }

        public DataTable initSujects()
        {
            DataTable subjects = new DataTable();
            foreach (string columnName in subjectsColumns)
            {
                subjects.Columns.Add(columnName);
            }

            for (int i = 0; i < 123; i++)
            {
                subjects.Rows.Add("title" + i, "uid" + i % 10,"time" + 1);
            }

            return subjects;
        }
    }

测试代码:

    class Program
    {

        static void Main(string[] args)
        {
            const string clmnUid = "uid";
            const string clmnName = "name";
            Data data = new Data();
            DataTable users = data.initUsers();
            DataTable subjects = data.initSujects();

            Hashtable uidsCount = Count.EntityCount(subjects, clmnUid);
            Hashtable maxCountUids = Count.MaxCountUid(uidsCount);
            Count.PrintMaxCountName(maxCountUids,users,clmnUid,clmnName);

            Console.Read();
        }
    }

输出结果:
uid0:name0(13)

uid1:name1(13)

uid2:name2(13)

时间: 2024-10-13 11:53:30

C#:使用Hashtable实现输出那些用户发表主题最多的信息的相关文章

62.对每个用户发表的博客进行分组

本节的需求:对已建好冗余数模型的数据进行分组. 本节的语法没有学懂 一.构造更多测试数据 PUT /website/users/3 { "name": "黄药师", "email": "[email protected]", "birthday": "1970-10-24" } PUT /website/blogs/3 { "title": "我是黄药师&q

管理Office365上的用户及所分配订阅信息

说到Office365上的用户,我们都知道分为两种,一种是在Office365上创建的online的全局管理用户,另外一种为使用dirsync工具将本地AD用户同步到Online上的用户,不管是Online上创建的用户还是本地到Online上的用户,我们如何管理用户信息呢,如何管理用户所分配的订阅的,我们都知道如果将本地AD用户同步到Online上,而且要让本地AD用户可以使用online上的对应的服务的话,我们需要给用户分配相关的订阅服务才可以.所以我们介绍一下,如何管理Online上的用户及

Linux id 命令 - 显示用户id和组id信息

要登入一台计算机,我们需要一个用户名.用户名是一个可以被计算机识别的身份.基于此,计算机会对使用这个用户名的登陆的人应用一系列的规则.在Linux系统下,我们可以使用 id 命令. 什么是 id 命令 id 命令可以显示真实有效的用户 ID(UID) 和组 ID(GID).UID 是对一个用户的单一身份标识.组 ID(GID)则对应多个UID. 如何使用 id 命令 id 命令已经默认预装在大多数 Linux 系统中.要使用它,只需要在你的控制台输入id.不带选项输入 id 会显示如下.结果会使

c语言:通过指向结构体变量的指针变量输出结构体变量中成员的信息

通过指向结构体变量的指针变量输出结构体变量中成员的信息. 解:程序: #include<stdio.h> #include<string.h> int main() { struct Student { long int num; char name[20]; char sex[10]; float score; }; struct Student stu_1;//定义struct Student类型的变量stu_1 struct Student *p; p = &stu_

iOS开发项目篇—39获取用户未读的微博信息(信息提醒)

iOS开发项目篇—39获取用户未读的微博信息(信息提醒) 一.简单说明 1.实现效果       2.实现 (1)新建一个类,封装请求 查看新浪官方要求的请求参数 该类中的代码设计 YYUnreadCountParam.h文件 1 // YYUnreadCountParam.h 2 //封装请求参数的类 3 4 #import "YYBaseParam.h" 5 6 @interface YYUnreadCountParam : YYBaseParam 7 /**uid true in

微信获取用户的openid和详细信息

获取用户的信息的原理,首先用户会点击一个url,这个url会包含一个参数redirect_uri,这个url是指向微信那边的服务器的,然后微信会把这个http请求重定向到redirect_uri,即我们的后端,而且会附带一个code参数,如果我们需要获取用户的基础信息(也就是openid)就需要用这个code去访问微信的指定url来请求用户的openid,如果我们需要获取用户的详细信息(微信名称,头像),我们就需要先用code获取一个access_token,再用这个access_token来获

Linux--记录每个用户登录后的IP信息,还有其它的操作信息

#Linux--记录每个用户登录后的IP信息,还有其它的操作信息,追加 vim /etc/profile PS1="`whoami`@`hostname`:"'[$PWD]' (Linux系统提示符是用系统变量PS1来定义的) history (who -u am i 会显示系统中登陆进来的用户及登陆从哪个IP登陆进来的,这里后面过滤了就取值一个登陆进来的IP) USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 

2014 FLASH MEMORY SUMMIT召开在即,国内NVDIMM企业受邀参展并发表主题演讲

2014 Flash memory summit召开在即 国内NVDIMM企业受邀参展并发表主题演讲 Flash memory summit 闪存峰会主旨在于展出非易失性存储器及SSD领域的主流应用,关键技术,及引领供应商驱动几十亿美元的市场.FMS是目前世界上最重要.最有影响力的Flash存储器行业盛会,将全面介绍未来趋势及最新创新研究成果. 第9界年度Flash存储峰会将于2014年8月5到8号在Santa Clara Convention Center,Santa Clara,CA隆重举行

黄聪:WordPress 多站点建站教程(二):后台(管理网络)设置详解,如何管理子站的用户、主题、插件、设置等功能

建立好了子站,我们需要有个地方配置所有子站的主题.插件等功能,我们可以在后台看到 我的站点--管理网络 如下图: 在 管理网络--仪表盘 里面,我们可以创新用户和站点,也提供了查询功能. 要注意的是:当你新上传的主题或者插件,都需要在管理网络那边的主题和插件里面将你上传的主题和插件开启.这样才可以在你的子站点中查看的到. 黄聪:WordPress 多站点建站教程(二):后台(管理网络)设置详解,如何管理子站的用户.主题.插件.设置等功能