通过Linq查询从双值的元组返回一个List
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过Linq查询从双值的元组返回一个List相关的知识,希望对你有一定的参考价值。
我有一个具有双值的元组列表:
List<Tuple<string, string>> Descriptions;
我一直在为此添加内容,如下所示:
Descriptions.Add (new Tuple<string, string> ("max", "some description"));
Descriptions.Add (new Tuple<string, string> ("joe", "some description"));
Descriptions.Add (new Tuple<string, string> ("jane", "some description"));
Descriptions.Add (new Tuple<string, string> ("max", "some other description"));
我想使用Linq检索一个列表,其中元组中的Item1
是一个特定值,比如"max"
。我可以使用这段代码:
var s = Descriptions.Where (x => x.Item1 == "max");
但是这将分配一个我不想要的元组列表。我只想要一个描述字符串的列表,也就是说,它应该返回一个list<string>
,其中包含与Item1
字符串"max"
相关的所有描述。
使用Select
:
var s = Descriptions.Where (x => x.Item1 == "max").Select(y => y.Item2);
这将返回一个IEnumerable<string>
。如果你想要一个列表,你还需要在最后添加ToList
:
var s = Descriptions.Where (x => x.Item1 == "max").Select(y => y.Item2).ToList();
或者您可以使用查询语法:
var s = from d in Descriptions
where d.Item1 == "max"
select d.Item2;
这与第一个选项相同。实际上,编译器会将查询语法转换为linq的扩展方法。
在Where()
之后,你可以使用Select()
方法只获得description
,在你的情况下将是Item2
的Tuple
,你需要这样做:
var s = Descriptions.Where(x => x.Item1 == "max")
.Select(x=>x.Item2); // projects only Description
这将返回IEnumerable<string>
形式的所有元素,其中Item1
具有值"max"
,如果你真的想把它作为List<string>
,那么你可以在结尾添加ToList()
方法调用。
希望能帮助到你。
如果您不使用其他解决方案,请尝试使用字典而不是元组列表。根据您的内容的外观,这更符合您的需求(只有您的名字是唯一的)。
Dictionary<string, string> NameDesc = new Dictionary<string, string>();
NameDesc.Add("max", "desc1");
NameDesc.Add("tim", "desc2");
var description = NameDesc["max"];
var maxExists = NameDesc.ContainsKey("max");
以上是关于通过Linq查询从双值的元组返回一个List的主要内容,如果未能解决你的问题,请参考以下文章
Python3基础 list(enumerate()) 将一个列表的每一个元素转换成 带索引值的元组
Python3基础 list enumerate 将列表的每个元素转换成 带索引值的元组