从其他项目检查一个元组项的值

时间:2017-08-29 17:20:32

标签: c# linq tuples

我有一个像

这样的元组列表
List<Tuple<int, string>> tuple = new List<Tuple<int, string>>();
tuple.Add(Tuple.Create(1, "10"));
tuple.Add(Tuple.Create(2, "20"));
tuple.Add(Tuple.Create(3, "30"));
tuple.Add(Tuple.Create(4, "None"));
tuple.Add(Tuple.Create(5, "None"));

还有另一个包含id的列表,它实际上是上面元组的第1项。

List<int> list = new List<int>():

列表包含2个值

list.Add(1);
list.Add(4);

我必须将列表的项目与元组的项目1进行比较,并在项目2的值不是"None"时获取元组的项目2的值。如果第2项的值在这些情况下为none,则仅使用第1项。

4 个答案:

答案 0 :(得分:2)

这是LINQ:

tuple
    .Where(x => list.Contains(x.Item1))
    .Select(x => x.Item2 == "None"
        ? x.Item1
        : int.Parse(x.Item2));

答案 1 :(得分:0)

您还可以进行内部联接:

var result= from e in list
            join t in tuple on e equals t.Item1
            select t.Item2=="None"?t.Item1:int.Parse(t.Item2);

答案 2 :(得分:0)

如果元组列表中的Item1将是唯一的,我建议使用字典。

var dict = new Dictionary<int, string>();

dict.Add(1, "10");
dict.Add(2, "20");
dict.Add(3, "30");
dict.Add(4, "None");
dict.Add(5, "None");

var list = new List<int>(){ 1, 4 };

Console.WriteLine(string.Join(", ", list.Select(i => dict[i] == "None" ? i.ToString() : dict[i])));

答案 3 :(得分:0)

试试这个。

List<Tuple<int, string>> tuple = new List<Tuple<int, string>>();
tuple.Add(Tuple.Create(1, "10"));
tuple.Add(Tuple.Create(2, "20"));
tuple.Add(Tuple.Create(3, "30"));
tuple.Add(Tuple.Create(4, "None"));
tuple.Add(Tuple.Create(5, "None"));
List<int> list = new List<int>();
list.Add(1);
list.Add(4);

var result = tuple.Join(list, t => t.Item1, l => l, 
            (t,l) => t.Item2 == "None" ? t.Item1.ToString() : t.Item2)
            .ToList();