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] + ;
}
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实现输出那些用户发表主题最多的信息的更多相关文章
- Linux id 命令 - 显示用户id和组id信息
要登入一台计算机,我们需要一个用户名.用户名是一个可以被计算机识别的身份.基于此,计算机会对使用这个用户名的登陆的人应用一系列的规则.在Linux系统下,我们可以使用 id 命令. 什么是 id 命令 ...
- Perl获取主机名、用户、组、网络信息
获取主机名.用户.组.网络信息相关函数 首先是获取主机名的方式,Perl提供了Sys::Hostname模块,可以查询当前的主机名: use Sys::Hostname; print hostname ...
- lastlog---显示系统中所有用户最近一次登录信息。
lastlog命令用于显示系统中所有用户最近一次登录信息. lastlog文件在每次有用户登录时被查询.可以使用lastlog命令检查某特定用户上次登录的时间,并格式化输出上次登录日志/var/log ...
- Node.js:实现知乎(www.zhihu.com)模拟登陆,获取用户关注主题
前一段时间,在瞎看看 Node.js,便研究通过 Node.js 实现知乎模拟登陆.相信,有很多网站有登陆权限设置,如若用户未登陆,将会跳转至首页提醒用户登陆,无法浏览部分页面. 如若是 b/s 架构 ...
- Spring MVC 学习笔记10 —— 实现简单的用户管理(4.3)用户登录显示全局异常信息
</pre>Spring MVC 学习笔记10 -- 实现简单的用户管理(4.3)用户登录--显示全局异常信息<p></p><p></p>& ...
- Spring MVC 学习笔记9 —— 实现简单的用户管理(4)用户登录显示局部异常信息
Spring MVC 学习笔记9 -- 实现简单的用户管理(4.2)用户登录--显示局部异常信息 第二部分:显示局部异常信息,而不是500错误页 1. 写一个方法,把UserException传进来. ...
- C4C和CRM里获取当前登录用户分配的Organization Unit信息
C4C 如何查看某个用户分配的组织单元ID: 在Employee的Organization Data区域内看到分配的组织名称,如下图红色下划线所示: 现在的需求就是使用ABSL获取当前登录用户分配的O ...
- 简单的股票信息查询系统 1 程序启动后,给用户提供查询接口,允许用户重复查股票行情信息(用到循环) 2 允许用户通过模糊查询股票名,比如输入“啤酒”, 就把所有股票名称中包含“啤酒”的信息打印出来 3 允许按股票价格、涨跌幅、换手率这几列来筛选信息, 比如输入“价格>50”则把价格大于50的股票都打印,输入“市盈率<50“,则把市盈率小于50的股票都打印,不用判断等于。
'''需求:1 程序启动后,给用户提供查询接口,允许用户重复查股票行情信息(用到循环)2 允许用户通过模糊查询股票名,比如输入“啤酒”, 就把所有股票名称中包含“啤酒”的信息打印出来3 允许按股票价格 ...
- 删除/添加/调用WordPress用户个人资料的联系信息
如果你要折腾主题或者将WordPress站点开放注册,你可能需要自定义WordPress用户个人资料信息.下面倡萌将简单说一下如何删除.添加和调用自定义用户信息字段. 添加或删除字段,可以在主题的 f ...
随机推荐
- VC++ 修改资源页面语言
选中 资源文件,在“属性”页面中更改 “language”选项: 资源视图中: 属性 页面中:
- javascript设计模式学习之十——组合模式
一.组合模式定义及使用场景 组合模式将对象组合成树形结构,用以表示“部分—整体”的层次结构,除了用来表示树形结构之外,组合模式还可以利用对象的多态性表现,使得用户对单个对象和组合对象的使用具有一致性. ...
- defer 要放在return之前
虽然defer可以在函数退出的时候执行,但是也要把它放在return之前,否则不会调用到. 错误的示范: res, err := Resource.open() if err != nil { ret ...
- java中的类和对象
Java中的类是一个模板,它用于描述一类对象的行为和状态. 对象则是类中的一个实例,对象有状态(属性)和行为(方法).例如一条狗就是一个对象,他的状态就是他的颜色,名字,品种:他的行为就是叫,摇尾巴, ...
- Windows2000安装Winform Clickonce提示升级系统版本的解决方案
Windows2000安装Winform Clickonce提示升级系统版本.只需要把所有应用的DLL的独立性设置为false就可以了.
- WebService的简单应用
具体看项目源文件:包含: ip地址查询, QQ在线状态查询,和自定义的MD5 破解和加密(呵呵有形无势...) http://pan.baidu.com/s/1bn09WQj SOAP 1.1 The ...
- [转]MySQL数据库引擎介绍、区别、创建和性能测试的深入分析
本篇文章是对MySQL数据库引擎介绍.区别.创建和性能测试进行了详细的分析介绍,需要的朋友参考下 数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎 ...
- C#: 自定义控件
(一)复合控件 http://wenku.baidu.com/link?url=y4BdtX3mOer4Hdin019jJpXJLi-2_ehmEo7i08cxEp1OR_3gb5CqaHrnNEB2 ...
- 关于VOID *在cl与gcc的不同(无意中发现)
在windows中,void *是不确定类型,CL编译器无法确定其步长 但在linux中,void *默认步长是1
- Openssl生成根证书、服务器证书并签核证书
1.修改Openssl配置文件CA目录: cat /etc/pki/tls/openssl.cnf dir = /etc/pki/CA 2.生成根证书及私钥: #http://www.haiyun.m ...