当前位置: 首页 > 面试题库 >

可以将一系列键映射到值的数据结构

邓昀
2023-03-14
问题内容

我试图找到一种数据结构,该数据结构从一系列值中获取特定值并将其映射到键。

例如,我具有以下条件:

  1. 从1到2.9,我想将其映射到A。
  2. 从4到6,我想将其映射到B。
  3. 从6.5到10,我想将其映射到C。

我的值为5,我想将其映射到键。因此,根据上述条件,我应该将其映射到B。

Java中是否有任何人可以推荐给我解决问题的数据结构?

目前,我正在使用只能将值映射到键的哈希表。我试图将值的范围映射到哈希表中存在的特定值。但是,我被困在值范围到特定值的映射中。所以现在我正在尝试另一种将值范围映射到键的方法。有谁知道我如何解决这个问题?

编辑:

感谢Martin Ellis,我决定使用TreeMap解决此问题。


问题答案:

您的范围不重叠吗?如果是这样,您可以使用TreeMap:

TreeMap<Double, Character> m = new TreeMap<Double, Character>();
m.put(1.0, 'A');
m.put(2.9, null);
m.put(4.0, 'B');
m.put(6.0, null);
m.put(6.5, 'C');
m.put(10.0, null);

由于您可能想要包含性查找(例如,2.9映射为“ A”而不是未定义),因此查找逻辑有些复杂:

private static <K, V> V mappedValue(TreeMap<K, V> map, K key) {
    Entry<K, V> e = map.floorEntry(key);
    if (e != null && e.getValue() == null) {
        e = map.lowerEntry(key);
    }
    return e == null ? null : e.getValue();
}

例:

mappedValue(m, 5) == 'B'

更多结果包括:

0.9 null
1.0 A
1.1 A
2.8 A
2.9 A
3.0 null
6.4 null
6.5 C
6.6 C
9.9 C
10.0 C
10.1 null


 类似资料:
  • 我试图找到一种数据结构,它从一系列值中获取特定值并将其映射到键。 例如,我有以下条件: 从1到2.9,我想把它映射到A. 从4到6,我要把它映射到B. 从6.5到10,我想把它映射到C. 我的值为 5,我想将其映射到一个键。所以基于上述条件,我应该将其映射到B。 Java中有什么数据结构可以推荐给我来解决这个问题吗? 目前我正在使用一个只能将值映射到键的哈希表。我尝试将值的范围映射到哈希表中存在的

  • 问题内容: 我正在寻找有关如何在Python中将一个范围值转换为另一范围值的想法。我正在从事硬件项目,正在从可返回一定范围值的传感器读取数据,然后使用该数据来驱动需要不同范围值的执行器。 例如,假设传感器返回的值在1到512的范围内,并且执行器由5到10的值驱动。我想要一个函数,我可以传递一个值和两个范围并取回该值映射到第二个范围。如果这样的函数被命名,则可以这样使用: 在此示例中,我希望输出为,

  • 问题内容: 我有一个数据框 我有另一个数据框df2 我希望我的最终数据框看起来像: 即从一个数据框映射到另一个创建新列 问题答案: + 假设您的数据框已经在上排序,则第一次排序调用是多余的,在这种情况下,您可以删除它。 / 或者,显式创建映射。如果您以后要使用它,它将起作用。

  • 我有一个数据框 我有另一个数据帧df2 我希望我的最终数据帧看起来像: i、 e从一个数据帧映射到另一个数据帧,创建新列

  • 想改进这个问题吗?通过编辑这篇文章添加细节并澄清问题。 我所拥有的是, 我想要的是, 其中,

  • 我有个问题。我在enter中得到了一个csv,其值如下: 该文件的名称类似于:AB01_TEST_ABDC_YYYYMMDd.csv 我需要把它们放到一张地图上,就像: Bar是csv中一行的bean,Foo是由Bar的一些元素创建的bean 现在,我成功地通过CSV的第一列值将列表拆分为一个映射。这给了: 我是这样做的: baz必须被csv的第一列和每个第一列值的行的itération拆分。因为