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

具体算法如下:

    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] + ;
}
else
{
uidsCount.Add(uid,);
}
}
return uidsCount;
}
#endregion #region 获取数量最多的实体 public static IList<string> MaxCountUid(Hashtable uidsCount,bool listResult)
{
int maxCount = ;
IList<string> uids = new List<string>();
int value = ;
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 = ;
Hashtable uids = new Hashtable();
int value = ;
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 = ; i < ;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 = ; i < ; i++)
{
subjects.Rows.Add("title" + i, "uid" + i % ,"time" + );
} 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)

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

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

    要登入一台计算机,我们需要一个用户名.用户名是一个可以被计算机识别的身份.基于此,计算机会对使用这个用户名的登陆的人应用一系列的规则.在Linux系统下,我们可以使用 id 命令. 什么是 id 命令 ...

  2. Perl获取主机名、用户、组、网络信息

    获取主机名.用户.组.网络信息相关函数 首先是获取主机名的方式,Perl提供了Sys::Hostname模块,可以查询当前的主机名: use Sys::Hostname; print hostname ...

  3. lastlog---显示系统中所有用户最近一次登录信息。

    lastlog命令用于显示系统中所有用户最近一次登录信息. lastlog文件在每次有用户登录时被查询.可以使用lastlog命令检查某特定用户上次登录的时间,并格式化输出上次登录日志/var/log ...

  4. Node.js:实现知乎(www.zhihu.com)模拟登陆,获取用户关注主题

    前一段时间,在瞎看看 Node.js,便研究通过 Node.js 实现知乎模拟登陆.相信,有很多网站有登陆权限设置,如若用户未登陆,将会跳转至首页提醒用户登陆,无法浏览部分页面. 如若是 b/s 架构 ...

  5. Spring MVC 学习笔记10 —— 实现简单的用户管理(4.3)用户登录显示全局异常信息

    </pre>Spring MVC 学习笔记10 -- 实现简单的用户管理(4.3)用户登录--显示全局异常信息<p></p><p></p>& ...

  6. Spring MVC 学习笔记9 —— 实现简单的用户管理(4)用户登录显示局部异常信息

    Spring MVC 学习笔记9 -- 实现简单的用户管理(4.2)用户登录--显示局部异常信息 第二部分:显示局部异常信息,而不是500错误页 1. 写一个方法,把UserException传进来. ...

  7. C4C和CRM里获取当前登录用户分配的Organization Unit信息

    C4C 如何查看某个用户分配的组织单元ID: 在Employee的Organization Data区域内看到分配的组织名称,如下图红色下划线所示: 现在的需求就是使用ABSL获取当前登录用户分配的O ...

  8. 简单的股票信息查询系统 1 程序启动后,给用户提供查询接口,允许用户重复查股票行情信息(用到循环) 2 允许用户通过模糊查询股票名,比如输入“啤酒”, 就把所有股票名称中包含“啤酒”的信息打印出来 3 允许按股票价格、涨跌幅、换手率这几列来筛选信息, 比如输入“价格>50”则把价格大于50的股票都打印,输入“市盈率<50“,则把市盈率小于50的股票都打印,不用判断等于。

    '''需求:1 程序启动后,给用户提供查询接口,允许用户重复查股票行情信息(用到循环)2 允许用户通过模糊查询股票名,比如输入“啤酒”, 就把所有股票名称中包含“啤酒”的信息打印出来3 允许按股票价格 ...

  9. 删除/添加/调用WordPress用户个人资料的联系信息

    如果你要折腾主题或者将WordPress站点开放注册,你可能需要自定义WordPress用户个人资料信息.下面倡萌将简单说一下如何删除.添加和调用自定义用户信息字段. 添加或删除字段,可以在主题的 f ...

随机推荐

  1. Redis一些基本的操作

    代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syst ...

  2. .NET Framework Execution Was Aborted By Escalation Policy

    错误#1 09:31 2015/1/26上班查看ERRORLOG发现下面错误信息字面上理解是有内存压力,中午的时候ERRORLOG频繁报下面错误问题核实,一台服务器上安装两个实例,其中一个实例设置了最 ...

  3. D3D标注动态避让

    原来也思考了该如何实现标注动态避让,认为必须得计算字符串所占的大小.如果在屏幕上要计算屏幕象素之类的东西. 今天总算找到了实现方法,在C# WorldWind中的KMLImporter类中有.关键是F ...

  4. play项目部署

    首先对于现场的数据库,一定要谨慎谨慎再谨慎,特别是保存有重要数据的. 使用expdp命令导入数据库: 事前准备: 1.确保linux服务器上已经正确安装oracle (10g以上版本) 2.有Xshe ...

  5. 一个NULL引发的血案

    go sql.stmt query 发生了一个NULL值,所以发现了error, 发现服务不停的初始化sql stmt, 导致连接数过多,服务就变得很慢. 首先,我在初始化的之前,要判断这个是否是NU ...

  6. 关于prototype

    之前听过课,可是这一块没怎么听懂,最近练了两个例子,又问了问小石同学,朦朦胧胧,感觉还是不太懂,记录点心得 最基本的例子 function Box(name,age){ this.name=name; ...

  7. Codeforce Round #213 Div2

    哎,弄了半天这次的C还是没出,真是捉急!,还TM的以为前几次只是运气不好!太逗了!

  8. JQuery权限管理

    <title></title> <script src="JS/jquery-1.7.1.js"></script> <scr ...

  9. 浅谈thinkphp中将字符串转换成json数组的方法

    这是一部分代码: $client = M("Client");$data = $client->where('user_id ='.$user_id)->select( ...

  10. 小项目:mini资源管理器【使用IO流:包含(Directory与DirectoryInfo、File与FileInfo的用法)】

    主界面是这样的 1.在点击查询引发的事件时把TextBox.Text输入的目录地址加载到TreeList控件里. private void btnSelect_Click(object sender, ...