【问题标题】:How do I store, sort and print a 2D "array" of strings and doubles in Java?如何在 Java 中存储、排序和打印字符串和双精度的二维“数组”?
【发布时间】:2015-03-09 01:13:58
【问题描述】:

我需要将以下数据存储在一个格式中,以便它可以按Double值从最低值到最高值排序。我对java不太了解。

Index,         Value
"string1",     1.1134
"string2",     2.3469
"string4",     5.2365
"string3",     2.5597
...

我知道我不能为此使用数组。所以有像 ArrayLists、Comparators、Maps、HashMaps 这样的东西,我找不到任何类似的例子来效仿。

这篇文章 (Sort a two dimensional array based on one column) 看起来很接近,但我不明白它是如何工作的。

注意事项:

  1. 我不会提前知道元素,所以我想维度 运行时的数组。我希望设计可以实现一些东西 比如“新的 2D-ArrayThingy[ExternalArray.size]”
  2. 我将在基于对象的循环中逐行获取所有元素。 它们将始终是字符串,后跟双精度。所以了解如何 要填充行,一次一个是有用的。我不在乎是否 order 是否为字符串。

子问题:

  1. 如何根据需要存储这些数据?
  2. 如何按双精度值对数据进行排序?
  3. 如何输出数据(例如屏幕)?

TIA!

【问题讨论】:

    标签: java arrays sorting arraylist multidimensional-array


    【解决方案1】:

    您可以将它们存储在TreeMap 中,它将根据它们的自然顺序返回键。在这种情况下,您可以将 Double 作为键,将 String 作为值。

    final Map<Double,String> map = new TreeMap<>();
    map.put(1.2, "String2");
    map.put(1.0, "String1");
    map.put(-1.0, "String0");
    for(Double d : map.keySet()) {
        System.out.println(d + " = " + map.get(d));
    }
    

    哪些输出:

    -1.0 = 字符串0

    1.0 = 字符串 1

    1.2 = 字符串2

    【讨论】:

    • 这似乎可行,但是这种 Treemap 格式有什么限制?看起来它只支持一个“值”。因此,如果我最终得到第三个维度,那么树形图将不起作用?我猜我可以将一些数组对象放在“值”部分,但是我需要另一种方法来修改该数组(而不是单一方法来修改所有内容)。
    【解决方案2】:

    您可以将它们放在TreeMap 中,如下所示:

    Map<Double, String> map = new TreeMap<Double, String>();
    

    然后,您可以通过Map.put() 方法将对象放入其中。地图的大小不是固定的,因此您可以随时对其进行编辑。假设你有两个数组,一个是 Doubles,一个是 Strings,它们会配对在一起,你可以:

    for (int i = 0; i < doubles.length; ++i)
    {
        map.put(doubles[i], string[i]);
    }
    

    然后,要按顺序打印,您所要做的就是:

    System.out.println(map);
    

    编码愉快!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-07
      • 1970-01-01
      • 2010-10-02
      • 2019-08-10
      • 1970-01-01
      • 1970-01-01
      • 2016-08-09
      • 2016-06-11
      相关资源
      最近更新 更多