0

在我的应用程序中,我需要一个二维数组。如果我定义它修复它工作正常,像这样:

static final String arrGroupelements[] = {"India", "Australia", "England", "South Africa"};
    static final String arrChildelements[][] = { {"Sachin Tendulkar", "Raina", "Dhoni", "Yuvi" },
                                                 {"Ponting", "Adam Gilchrist", "Michael Clarke"},
                                                 {"Andrew Strauss", "kevin Peterson", "Nasser Hussain"},
                                                 {"Graeme Smith", "AB de villiers", "Jacques Kallis"} };

但是,在我的代码中,我有两个列表。第一个是我能得到的食谱名称列表。

LinkedList<String> recipeList = dbShoppingHandler.getAllRecipeNames();
        String arrGroupelements[] = new String[recipeList.size()];
        for(int i=0; i<recipeList.size(); i++) {
            arrGroupelements[i] = recipeList.get(i);
        }

我的第二个清单是成分清单。为了获得成分列表,我需要设置配方名称,然后我可以获得列表。但是,我不知道如何将此列表作为第二维。我的代码是这样的:

String arrChildelements[][] = new String[recipeList.size()][20];
        for(int i=0; i<recipeList.size(); i++) {
            LinkedList<String> ingredient = dbShoppingHandler.getIngredientsOfRecipeName(recipeList.get(i));
            for(int j=0; j<ingredient.size(); j++) {
                arrChildelements[i][j] = ingredient.get(j);
            }
        }

不好的是,我需要为第二维设置一个数字(在我的情况下为 20)。如果我喜欢这个有 5 个项目的列表,我将有 15 个“”元素,而那些有超过 20 个项目的代码将忽略它们。

第一个维度是固定的,但我需要根据成分的数量调整第二个维度。

任何建议表示赞赏。谢谢。

4

3 回答 3

4

如何在所需的大小中分配一个数组:

String arrChildelements[][] = new String[recipeList.size()][];
//                     not mentioning second dimension size ^^
for(int i=0; i<recipeList.size(); i++) {
    LinkedList<String> ingredient = dbShoppingHandler.getIngredientsOfRecipeName(recipeList.get(i));
    arrChildelements[i] = String[ingredient.size()];
//   assigning new array here ^^
    for(int j=0; j<ingredient.size(); j++) {
        arrChildelements[i][j] = ingredient.get(j);
    }
}
于 2012-08-06T08:20:47.800 回答
1

我建议不要将二维数组用于动态结构。数组是不可变的,所以你必须复制它们,创建间隙并移动元素。标准 Java 库没有提供很多有用的方法来做到这一点。

相反,使用列表列表:

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

列表有许多有用的方法来附加元素、插入和删除它们,它们会让你的生活更轻松。

于 2012-08-06T08:22:46.113 回答
0

不假设您提前知道长度的最简单方法。

String[][] arrChildelements[] = new String[recipeList.size()][];
for(int i=0; i<recipeList.size(); i++) {
    List<String> ingredient = dbShoppingHandler.getIngredientsOfRecipeName(recipeList.get(i));
    arrChildelements[i] = ingredient.toArray(new String[0]);
}
于 2012-08-06T08:26:21.103 回答