您的位置:首页 > 编程语言 > C#

C# 使用Dictionary、linq实现根据集合里面的字符串进行分组

2014-11-28 22:39 661 查看
//对下面集合里面的字符串按照“_”进行分组。
List<string> list = new List<string>() { "1_32", "2_10", "1_8", "1_25", "2_3", "3_5", "5_15", "3_16" };


使用字典:

#region //使用字典,键值对集合保存分组数据。
Dictionary<string, List<string>> groupDic = new Dictionary<string, List<string>>();
foreach (var item in list)
{
//取KEY值
string key = item.Split('_')[0];
//根据key值判断集合中是否存在指定的键,不存在则创建一个。
if (!groupDic.ContainsKey(key))
{
groupDic.Add(key, new List<string>()); //初始化
}
groupDic[key].Add(item); //直接把当前元素添加到,key对应的List集合中。
}

foreach (var item in groupDic)
{
var s = groupDic[item.Key];
for (int i = 0; i < s.Count; i++)
{
Console.WriteLine("KEY:{0} Value:{1}", item.Key, s[i]);
}
}
#endregion


使用linq


#region //使用linq 分组
var groupList = from s in list
group s by s.Split('_')[0] into g
select g;

foreach (var item in groupList)
{
var s = groupDic[item.Key];
for (int i = 0; i < s.Count; i++)
{
Console.WriteLine("KEY:{0} Value:{1}", item.Key, s[i]);
}
}
#endregion



使用lambda:

#region //使用lambda 分组
var groupList2 = list.GroupBy(s => s.Split('_')[0]).Select(g => g);

foreach (var item in groupList2)
{
var s = groupDic[item.Key];
for (int i = 0; i < s.Count; i++)
{
Console.WriteLine("KEY:{0} Value:{1}", item.Key, s[i]);
}
}
#endregion


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: