【问题标题】:How to reduce dimension?如何降维?
【发布时间】:2016-08-25 08:55:08
【问题描述】:

假设我有一个IEnumerable(Of IEnumerable(Of Integer))。所有内部IEnumerables 都包含IDs。我想将所有IDsDistinctly 收集到IEnumerable(Of Integer) 中。如果我这样做,我可以做到这一点:

Dim result as New List(Of Integer)
For Each element In IDs
    result.AddRange(element)
Next
result = result.Distinct

这种方法有两个问题: - 当可能有Function 用于此目的时,我必须编写迭代代码,但我不知道 - 结果是List,我想保留内部IEnumerable的类

有没有方便的 LINQ 方法来做到这一点?

编辑:

这个问题不同于this one,因为我说的是IEnumerables,而不是Lists。是的,我知道每个List 都是IEnumerable,但我也知道并非每个IEnumerable 都是List。因此,这是一个比标记为重复的问题更普遍的问题,正如我在原始问题中指定的那样,我想在结果中保留内部 IEnumerableClass。如果是数组,我更喜欢使用数组。

【问题讨论】:

  • 一个List 是一个IEnumerable
  • @KeithMifsud,我在询问 IEnumerables。如果它们是数组,我希望结果也是数组。这是一个更普遍的问题。
  • 嘿,我只是想保持清洁。问题是重复的,答案也是重复的。你想要IEnumerable,而老问题是List' which is an 'Ienumerabe,所以解决方案的工作原理完全相同
  • 通过编辑我终于明白了这个问题(关于内部类的一点。简单地说,你不能;我可以通过IEnumerable(Of (IReadOnlyCollection(Of T));我可以通过IEnumerable(Of MyCustomThing) 与 MyCustomThing 实现 IEnumerable。该方法应该如何知道如何向它们添加项目。您仍然可以将结果的“形状”推迟给调用者(由他决定将结果转换为他想要的)或使用重载为他利用这些“转换”(对于“已知”案例)

标签: vb.net linq ienumerable


【解决方案1】:

你可以使用SelectMany扩展方法来展平结构,展平后寻找Distinct

result = IDs.SelectMany(Function(x) x).Distinct();

检查这个Demo

【讨论】:

  • Hari,你能确认 SelectMany 会导致内部 IEnumerables 中使用的类的实例吗?
  • 确实如此,@LajosArpad。
猜你喜欢
  • 2015-02-28
  • 2023-04-09
  • 2013-07-29
  • 2013-12-31
  • 2013-04-07
  • 2014-11-23
  • 1970-01-01
  • 2013-08-14
相关资源
最近更新 更多