Java的NavigableMap.floorEntry的C Sharp中的等价物,ceilingEntry

我在 Java中多次使用NavigableMap接口,这很方便.

具体来说,我喜欢使用它的floorEntry和ceilingEntry方法,它们分别为您提供下一个最低或最高的地图条目.

我试图在C#中找到它们的等价物,但我很简短.以下是我想要获得的一个例子.

我看过C#SortedDictionary和扩展方法,虽然它看起来像是在球场,但我还没找到我正在寻找的东西.

谢谢!
大号

package com.lewis.needsanavigablemapincsharp;

import java.util.NavigableMap;
import java.util.TreeMap;

public class Main {

    public static void main(String[] args) {

        NavigableMap<Float,String> neededMap = new TreeMap<Float,String>();

        neededMap.put(1.0f,"first!");
        neededMap.put(3.0f,"second!");

        System.out.println("see how useful this is? (looking up indices that aren't in my map)");
        System.out.println(neededMap.floorEntry(2.0f));
        System.out.println(neededMap.ceilingEntry(2.0f));

    }
}

输出是:

see how useful this is? (looking up indices that aren’t in my map)
1.0=first!
3.0=second!

解决方法

遗憾的是,该解决方案要求您编写自定义扩展.所以,我已经完成了它,并将其作为一个要点上传SortedDictionaryExtensions.cs.

它通过将字典的密钥集合转换为列表来利用List< T> .BinarySearch方法.然后,在答案here的帮助下,我们确定密钥是否存在,如果不存在,我们将楼层和天花板值作为按位补码,然后选择我们需要的方法.

请注意我没有测试过这种算法的效率,但乍一看似乎还不错.

你可以像这样测试它:

SortedDictionary<float,string> neededMap = new SortedDictionary<float,string>();

neededMap.Add(1.0f,"first!");
neededMap.Add(3.0f,"second!");

Console.WriteLine("see how useful this is? (looking up indices that aren't in my map)");
Console.WriteLine(neededMap.FloorEntry(2.0f));
Console.WriteLine(neededMap.CeilingEntry(2.0f));

相关文章

ArrayList简介:ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增...
一、进程与线程 进程:是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。 线程...
本文为博客园作者所写:&#160;一寸HUI,个人博客地址:https://www.cnblogs.com/zsql/ 简单的一个类...
#############java面向对象详解#############1、面向对象基本概念2、类与对象3、类和对象的定义格式4、...
一、什么是异常? 异常就是有异于常态,和正常情况不一样,有错误出错。在java中,阻止当前方法或作用域...
Collection接口 Collection接口 Collection接口 Collection是最基本的集合接口,一个Collection代表一组...