c# - 如何从 C# 中的一个条件创建一个列表的子集
问题描述
使用 LINQ,如何将列表拆分为具有相同值的不同列表集?
就我而言,我有一个元组列表(参见下面的示例)。我想将我的列表分成 X 个子集,其中每个 item2 都相等。我已经找到了一个解决方案,即执行 a GroupBy
onstring
将所有可能的值item2
放入一个列表中,然后在 aforeach
中,获取一个新列表,其中 item2 等于 current 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
}
解决方案
你的意思是这样的吗?
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();
}
}
}
}
推荐阅读
- spring-boot - GRPC 调用失败并出现错误“在来自服务器的 DATA 帧上收到了意外的 EOS”。
- python-3.x - 循环中的Python幂运算符:某个元素后的奇怪输出值
- linux - Centos6.9 目录中的权限被拒绝
- javascript - 将父级添加到多个
- 标签
- react-native - 请求在 react-native 中不适用于 android 9
- sql - 获取最后一个非空值?
- php - PHP函数和赋值:echo和return之间的混淆
- node.js - 使用 pngjs 从缓冲区读取图像
- java - Android canvas.save() 和 canvas.restore() 使我的应用程序崩溃
- r - 在R中读取xlsx文件