首页 新闻 搜索 专区 学院

如何获得一个集合里只出现一次的值

0
悬赏园豆:20 [已解决问题] 解决于 2012-09-24 19:54

请看下面的泛型集合

1 List <string>  str1=new List<string>
2 str1.Add("11111");
3  str1.Add("2222");
4 str1.Add("11111");
5 str1.Add("aaaa");

怎样可以得到这个集合里只出现过一次的值,比如说什么str1集合里的“aaaa”就是要得到的值。

无情未明的主页 无情未明 | 初学一级 | 园豆:17
提问于:2012-09-24 11:26
< >
分享
最佳答案
1
var query = str1.GroupBy(g => g).Where(w => w.Count() == 1);
收获园豆:18
Qlin | 老鸟四级 |园豆:2403 | 2012-09-24 12:17

你是最棒的,灰常感谢。

无情未明 | 园豆:17 (初学一级) | 2012-09-24 19:53
其他回答(5)
1

str1.GroupBy().Keys

收获园豆:2
Launcher | 园豆:45045 (高人七级) | 2012-09-24 11:33

分组确实可以 

不过可能稍微性能差点 不过没关系了 

支持(1) 反对(0) 架构师修行之路 | 园豆:322 (菜鸟二级) | 2012-09-24 11:38
0

笨的方法,你肯定得循环这个集合一次,然后对比,不知道扩展方法中有没有这个类似的方法

架构师修行之路 | 园豆:322 (菜鸟二级) | 2012-09-24 11:34
0

有一个方法可能会提高点性能,先排序,然后一个个取,取出来的时候和最后一个对比一下,如果想等就不要

田林九村 | 园豆:2367 (老鸟四级) | 2012-09-24 11:59
0

这个方法我觉得可以,因为我在写SQL语句的时候也是先分组然后使用have

独孤雄 | 园豆:165 (初学一级) | 2012-09-24 16:45
0

List<string> str1 = new List<string>();
str1.Add("11111");
str1.Add("22222");
str1.Add("11111");
str1.Add("aaaaa");
List<string> str2 = new List<string>();
foreach(var a in str1)
{
  if (!str2.Contains(a)) //判断str2里面是否已经存在a 这个值
  {
    str2.Add(a);
  }
}

str2里面的值就是str1里面只出现一次的值

这是不是你想要的呢?

WOWEN | 园豆:180 (初学一级) | 2012-09-24 17:11

这个代码我知道,得到的结果是

11111
22222
aaaaa

是得到唯一的值,但是不是只出现了一次,

楼下有个用GroupBy分组的方法确实可行,效果很好。

你可以试一试。

支持(0) 反对(0) 无情未明 | 园豆:17 (初学一级) | 2012-09-24 19:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册