java - .NET相当于Java的TreeSet操作tailSet和headSet吗?

标签 java .net collections

我正在尝试使用 .NET 4 的 SortedSet<T> Collection 。它似乎拥有我需要的一切,除了一些东西。

:我希望能够获取与给定值相比更低或更高的所有元素。在Java中TreeSet ,有名为 tailSet 的方法和headSet ,执行这些操作。我希望能够对 SortedSet<T> 执行同样的操作。我能找到的最接近的是 GetViewBetween 。但是,如果我想将 SortedSet 与 string 一起使用怎么办? ? string 没有最大值据我所知,但我需要给该方法一个上限和下限。

我如何模仿 tailSet 的行为和headSet使用SortedSet ?考虑实现SortedSet ,我认为这些都是非常容易实现的方法。

谢谢!

最佳答案

我相信你可以像这样模仿他们: sortedSet.GetViewBetween(start, sortedSet.Max) sortedSet.GetViewBetween(sortedSet.Min, end)

static SortedSet<T> TailSet<T>(this SortedSet<T> set, T start)
{
    return set.GetViewBetween(start, set.Max);
}

static SortedSet<T> HeadSet<T>(this SortedSet<T> set, T end)
{
    return set.GetViewBetween(set.Min, end);
}

或者,您可以使用 LINQ:

static SortedSet<T> TailSet<T>(this SortedSet<T> set, T start)
{
    return new SortedSet<T>(set.SkipWhile(
        x => set.Comparer.Compare(x, start) < 0));
}

static SortedSet<T> HeadSet<T>(this SortedSet<T> set, T end)
{
    return new SortedSet<T>(set.TakeWhile(
        x => set.Comparer.Compare(x, end) < 0));
}

主要区别在于 GetViewBetween为您提供一个带有指向原始集的指针的对象,因此原始集中的任何更改都可以反射(reflect)在副本中。 LINQ 版本根据原始内容创建一个新集,并提供不相互跟踪的副本。当然,你也可以这样做 new SortedSet<T>(set.GetViewBetween(set.Min, end))获得克隆行为。

关于java - .NET相当于Java的TreeSet操作tailSet和headSet吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4007099/

相关文章:

c# - .NET 将对象转换为...对象的目标是什么?

.net - asp :Menu hover makes "Security Information" pop up, 我该如何修复?

c# - 捕获控制台退出 C#

java - Java 中的内存映射集合

java json 转换时出错

java - 反序列化错误时使 Firestore 缓存无效

java - 想知道 JFrames (BorderLayout) 的区别

java - 如何在 JTable 中显示数据库中的数据而不附加另一个数据库中的其他数据?

objective-c - Objective-C 中是否存在强类型集合?

java - 如何判断队列大小是否大于最大整数?