【问题标题】:Looping in 2D-List JAVA在 2D 列表 JAVA 中循环
【发布时间】:2023-03-19 05:40:01
【问题描述】:

我正在尝试从 2D 列表中获取我的函数的值。

我的二维列表值定义为

List<List<String>> combined2d = new ArrayList<List<String>>();

将值添加到我的列表后,结构如下所示,

[[62744768, 62536400, 63689012, 63676486], [67888160, 67852422, 67299346, 68149470], [2017-09-06, 2017-09-05, 2017-09-17, 2017-09-15]]

我有一个带有 3 个参数的函数,即

FuncA(string param1,string param2,string param3)
{
//some operations
}

现在我想通过循环 2D 列表值来传递 FuncA 的参数。

For 循环 1

我必须从列表中获取 00,10,20 索引值,例如

62477,6780,2017-09-06

这样我会将参数传递给我的 FuncA 像

FuncA(62477,6780,2017-09-06)

For 循环 2

就像循环 2 一样,

FuncA(600,6785,2017-08-05)

For 循环 3

FuncA(12,646,2017-07-17)

最多 N 个循环...

对于一个简单的 ArrayList,我可以像这样循环遍历

    for(String value:Singlearraylist) {
        FuncB(value);
    }

由于我是 java 新手,我无法在这里找到解决问题的方法。

感谢您的回复
周杰伦

【问题讨论】:

  • 在我看来,您的数据未对齐,而不是按列放置,您应该将参数组合成一个通用对象作为行
  • 提供你的循环代码,以便其他人可以找到你的错误
  • 您至少可以尝试回帖吗?
  • @MadProgrammer 更新
  • 您需要创建可以封装param1param2param3的对象,然后您只需维护这些对象的List

标签: java for-loop arraylist multidimensional-array


【解决方案1】:
String[] strings = new String[combined2d.size()];

for (int i = 0; i < combined2d.get(0).size(); i++){

   for (int j = 0; j < combined2d.size(); j++){
      strings[j] = combined2d.get(j).get(i);
   }

   FuncA(strings[0] strings[1], strings[2]);
}

我认为这对你来说很好。

【讨论】:

  • 这种方式是错误的。当您获得 0,1 和 2 索引时。依次获得 2D 索引为 00,01,02。所以你会得到值 {62744768,62536400,63689012} 这对我来说不是实际情况
  • @JayendranRosh 立即查看
  • 完美运行
【解决方案2】:

正如@MadProgrammer 建议的那样,创建一个包含数据成员param1 param2 param3 的类,其中包含getter 和setter 以及此类类型的列表,您可以使用它来将传递值迭代到FuncA(...,...,...)

class Data{
    String param1, param2, param3;
    // constructors, getters and setters
}

List<Data> listData = new ArrayList<>();
for(Data temp : listData)FuncA(temp.getParam1(),temp.getParam2(),temp.getParam3());

您创建列表的方式也是这里的关键,正如 @MadProgrammer 在 cmets 中所建议的那样。 这样,您的代码更易于阅读和调试。

【讨论】:

    【解决方案3】:

    如果所有列表的大小不均匀,则循环大小应该是二维列表中给定的所有给定列表的最小大小。相应的代码可以写成如下:

    List<List<String>> combined2d = new ArrayList<List<String>>();
    
    int minTemp = Math.min(combined2d.get(0).size(),combined2d.get(1).size());
    int min = Math.min(minTemp,combined2d.get(2).size());
    
    for(int i=0; i<min ; i+= 10){
        FuncA(combined2d.get(0).get(i), combined2d.get(1).get(i), combined2d.get(2).get(i));
    }
    

    【讨论】:

      猜你喜欢
      • 2014-06-22
      • 1970-01-01
      • 2018-12-08
      • 2018-04-30
      • 2014-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-28
      相关资源
      最近更新 更多