gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 00:48:56 24 4
gpt4 key购买 nike

我正在尝试使用 .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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com