【问题标题】:How to filter a list into 2 separate list如何将列表过滤为 2 个单独的列表
【发布时间】:2016-03-21 08:46:12
【问题描述】:

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

电路板测试和 董事会测试管理员

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

但是现在我需要 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;

【问题讨论】:

  • 你试过FilteredGroup.GroupBy(x=>x);

标签: c# list filter


【解决方案1】:

我想说你快到了,只需检查名称 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"));

【讨论】:

    【解决方案2】:
    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;
    

    【讨论】:

    • 对不起,我应该提到这一点,我给出的 2 个例子不是常量。明天可能会添加“Board HaHa”和“Board HaHa Admin”。唯一的非变量将是开头的“Board”和结尾的“Admin”。
    【解决方案3】:

    试试这个扩展方法...

    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);
    

    【讨论】:

    • 我仍然无法正常工作。我以前不需要对列表执行此操作,所以我边走边学。
    • @Jynx 在您的项目中创建 ListExtension 类......然后您的任何列表属性都将具有 split 方法......您只需创建 ListExtensions 方法......然后使用。 .. var temp = FilteredGroup.split(FilteredGroup.length); temp 变量将具有您想要的分隔列表...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-05
    相关资源
    最近更新 更多