如何将一个列表筛选为两个单独的列表

本文关键字:列表 两个 单独 一个 筛选 | 更新日期: 2023-09-27 18:26:55

我正在将一个用户活动目录组拉入一个列表中。列表中有几个组,其中一些列为

电路板测试;板测试管理员

我将列表过滤成一个新的列表,其中只包含以"Board"开头的所有内容,所以现在我的列表只包含上面的2行。

但是现在我需要两个单独的清单。因此,从最初的长组列表中,我需要创建一个只包含"Board Testing"行的列表。还有另一个只包含"Board Testing Admin"的列表。

我原来做的事现在行不通了。

    List<string> GroupNames = new List<string>();
    GroupNames.AddRange(ADConnect.ADConnect.GetGroups(adusername));
    List<string> FilteredGroup = new List<string>();
    var FilteredName = new String[] { "Board" };
    var names = GroupNames.Where(t => FilteredName.Any(c => t.Contains(c)));
    FilteredGroup.AddRange(names);
    cmbgroup.DataSource = FilteredGroup;

如何将一个列表筛选为两个单独的列表

我想说你已经差不多了,只需检查名称Contains()是否为"Board Testing Admin":

List<string> GroupNames = new List<string>();
GroupNames.AddRange(ADConnect.ADConnect.GetGroups(adusername));
var group1 = GroupNames.Where(g => g.Contains("Board Testing Admin"));
var group2 = GroupNames.Where(g => !g.Contains("Board Testing Admin"));
List<string> GroupNames = new List<string>();
GroupNames.AddRange(ADConnect.ADConnect.GetGroups(adusername));
List<string> FilteredBoardTestingGroup = new List<string>();
List<string> FilteredBoardAdminGroup = new List<string>();
var FilteredName = new String[] { "Board Testing" };
var names = GroupNames.Where(t => FilteredName.Any(c => t.Contains(c)));
FilteredBoardTestingGroup.AddRange(names);
FilteredName = new String[] { "Board Testing Admin" };
names = GroupNames.Where(t => FilteredName.Any(c => t.Contains(c)));
FilteredBoardAdminGroup.AddRange(names);
cmbgroup1.DataSource = FilteredBoardTestingGroup;
cmbgroup2.DataSource = FilteredBoardAdminGroup;

试试这个扩展方法

public static class ListExtensions
{
    public static List<List<T>> split<T>(this List<T> source, int sizeOfList) 
    {
        return source
            .Select((x, i) => new { Index = i, Value = x })
            .GroupBy(x => x.Index / sizeOfList)
            .Select(x => x.Select(v => v.Value).ToList())
            .ToList();
    }
}

实施:

List<string> test = new List<string> { "A", "B", "C" };
List<List<string>> temp = test.split(test.Count);