c# – LINQ:将单个列表分成多个列表
发布时间:2020-12-16 00:06:37 所属栏目:百科 来源:网络整理
导读:我有一个包含这些条目的数组: {1,1,2,3,4} 我想将它们转换为(在这种情况下为3个列表): {1,4}{1,3}{3} 有没有办法用LINQ或SQL做到这一点?我想这个操作有一个数学术语,不幸的是我不知道…… 或者我必须使用循环吗? ======= 编辑:我无法真正描述逻辑,所以
我有一个包含这些条目的数组:
{1,1,2,3,4} 我想将它们转换为(在这种情况下为3个列表): {1,4} {1,3} {3} 有没有办法用LINQ或SQL做到这一点?我想这个操作有一个数学术语,不幸的是我不知道…… 或者我必须使用循环吗? ======= 编辑:我无法真正描述逻辑,所以这里有更多的例子..它或多或少在数组上循环多次并且每个数字一次(但每一个数字只有一次),直到没有数字为止 {1,4,5} 要么 {1,3} 解决方法private IEnumerable<List<int>> FooSplit(IEnumerable<int> items) { List<int> source = new List<int>(items); while (source.Any()) { var result = source.Distinct().ToList(); yield return result; result.ForEach(item => source.Remove(item)); } } 用法: int[] items = { 1,4 }; foreach(var subList in FooSplit(items)) { // here you have your three sublists } 这是另一种解决方案,它的可读性较差,但性能更佳: private IEnumerable<IEnumerable<int>> FooSplit(IEnumerable<int> items) { var groups = items.GroupBy(i => i).Select(g => g.ToList()).ToList(); while (groups.Count > 0) { yield return groups.Select( g => { var i = g[0]; g.RemoveAt(g.Count - 1); return i; }); groups.RemoveAll(g => g.Count == 0); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |