在Tuple
List
的{{1}}中创建每个Tuples
的第一项列表的正确方法是什么?
如果我有List<Tuple<string,string>>
,我如何获得List<string>
中第一个字符串的Tuple
?
答案 0 :(得分:22)
一点点Linq会做到这一点:
var myStringList = myTupleList.Select(t=>t.Item1).ToList();
作为解释,由于Tim发布了几乎相同的答案,Select()会创建一个1:1的“投影”;它接受Enumerable的每个输入元素,并且对于它们中的每一个,它计算lambda表达式并将结果作为具有相同元素数量的新Enumerable的元素返回。然后,ToList()将遍历Select()生成的Enumerable,并将每个元素一次添加到新的List<T>
实例。
答案 1 :(得分:5)
List<string> list = tuples.Select(t => t.Item1).ToList();
或者,可能更少的内存昂贵:
List<string> list = new List<String>(tuples.Count);
list.AddRange(tuples.Select(t => t.Item1));
因为它避免了List.Add
中ToList
的倍增算法。
答案 2 :(得分:0)
如果您有List<Tuple<string, string>> listoftuples
,则可以使用List的Select方法实现从每个元组中获取第一个字符串。
看起来像这样:
List<string> firstelements = listoftuples.Select(t => t.Item1).ToList();
答案 3 :(得分:0)
Generialised Variant: 用于选择集合的元组长度未知的特定项目,即2,3,4 ......:
static IEnumerable TupleListSelectQuery<T>(IEnumerable<T> lst, int index) where T : IStructuralEquatable, IStructuralComparable, IComparable
{
return lst.Select(t => typeof(T).GetProperty("Item" + Convert.ToString(itemNumber)).GetValue(t)).ToList();
}
其中 index 的值对应于枚举元组的方式,即1,2,3 ......(不是0,1,2 ......)。