首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET相当于Java的TreeSet操作tailSet和headSet?

.NET相当于Java的TreeSet操作tailSet和headSet?
EN

Stack Overflow用户
提问于 2010-10-24 03:49:59
回答 2查看 1.5K关注 0票数 0

我正在尝试使用.NET 4的SortedSet<T>集合。好像有我需要的东西-几样东西。

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

如何使用tailSetheadSet来模拟SortedSet的行为?考虑到SortedSet的实现,我认为这些方法很容易实现。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-24 04:44:19

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

代码语言:javascript
复制
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:

代码语言:javascript
复制
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为您提供了一个指向原始集的指针的对象,因此原始集中的任何更改都可以反映在副本中。LINQ版本根据原始版本的内容创建一个新集,提供不相互跟踪的副本。当然,您也可以做一些类似new SortedSet<T>(set.GetViewBetween(set.Min, end))的事情来获得克隆行为。

票数 2
EN

Stack Overflow用户

发布于 2010-10-24 04:31:01

我认为小小的LINQ可以解决这个问题:

代码语言:javascript
复制
        var sortedSet = new SortedSet<string>();
        sortedSet.Add("Santiago");
        sortedSet.Add("Alejandra");
        sortedSet.Add("Carolina");
        sortedSet.Add("Sebastián");

        var head = sortedSet.Where(s => string.Compare(s, "Carolina") < 0);
        var tail = sortedSet.Where(s => string.Compare(s, "Carolina") >= 0);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4007099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档