使用LINQ,如何将列表拆分为具有相同值的不同列表集?
就我而言,我有一个元组列表(请参见下面的示例)。我想将每个item2相等的X子集划分为我的列表。我已经找到了一种解决方案,该方法是在GroupBy
上进行string
,将item2
的所有可能值放入一个列表,然后在foreach
内,获取一个新列表其中item2等于当前的string
。
但是,我觉得它效率不高,并且必须有一个单独的LINQ语句即可完成所有工作。我想将来知道。
所需的输出应为元组列表,以字符串列中不同值的数量表示
+-------+--------+
| bool | string |
+-------+--------+
| true | type1 |
| false | type1 |
| true | type2 |
| false | type1 |
| false | type2 |
+-------+--------+
我的代码如下:
var items2 = results.GroupBy(tuple => tuple.Item2);
foreach (var item in items2)
{
var links = results.Where(tuple => tuple.Item2 ==
item.Key).ToList();
// Do what I want with the links List of my Tuple
}
答案 0 :(得分:2)
你的意思是这样吗?
using System;
using System.Linq;
namespace ConsoleApp1
{
class Program
{
public static void Main()
{
(bool, string)[] tuples =
{
(true, "type1"),
(false, "type1"),
(true, "type2"),
(false, "type1"),
(false, "type2")
};
var data = tuples
.GroupBy(item => item.Item2)
.Select(group => group.ToList())
.ToList();
Console.WriteLine($"Group count = {data.Count}");
foreach (var list in data)
{
Console.WriteLine(string.Join(", ", list));
}
}
}
}
输出:
Group count = 2
(True, type1), (False, type1), (False, type1)
(True, type2), (False, type2)
这假定您希望将输出作为组列表(每个组是(bool, string)
元组的列表)。
请注意,如果您只需要通过foreach
访问元素,则不必不必将组变成列表。例如:
using System;
using System.Linq;
namespace ConsoleApp1
{
class Program
{
public static void Main()
{
(bool, string)[] tuples =
{
(true, "type1"),
(false, "type1"),
(true, "type2"),
(false, "type1"),
(false, "type2")
};
var groups = tuples.GroupBy(item => item.Item2);
foreach (var group in groups)
{
foreach (var item in group)
{
Console.WriteLine(item + ", ");
}
Console.WriteLine();
}
}
}
}