比较2d数组和字符串数组

时间:2016-03-31 00:42:12

标签: android arrays loops multidimensional-array

我一直在研究这个问题大约五个小时,实现了许多不同的方法来实现这个目标,但似乎没有任何工作。我正处于我甚至不能再思考的地步,所以我在这里发帖。

我有一个检索字符串的共享首选项。该字符串被转换为字符串数组。我有一个2d数组,其中有四个数组设置为索引。我想循环遍历2d数组并将我的字符串数组与它进行比较。如果在我的字符串数组中找到每个2d数组索引的内容,则打印true,否则为false。

final SharedPreferences sharedPref = CocktailsFrag.this.getActivity().getPreferences(Activity.MODE_PRIVATE);
//recall stored ingredients
String arrayString = sharedPref.getString("myIngredients", null);

if(arrayString ==null) {
    //do nothing
} else {
    String str1 = arrayString.replace("[", "");
    String str2 = str1.replace("]", "");
    String[] strValues = str2.split(",");

    String drink1[] = {"Ale", "Brandy"};
    String drink2[] = {"Vodka", "Tobasco Sauce"};
    String drink3[] = {"Lager", "Stout"};
    String drink4[] = {"Guiness", "Champagne"};
    String[][] arrays = {drink1, drink2, drink3, drink4};

    for(int i=0; i<arrays.length-1;i++) {
        String[] indexValue = arrays[i];
        if(strValues[i].contains(indexValue[i])) {
            Toast.makeText(getActivity().getApplicationContext(), indexValue[i]+ "", Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(getActivity().getApplicationContext(), "false", Toast.LENGTH_LONG).show();
        }
    }
}

有关如何实现这一目标的任何想法?

1 个答案:

答案 0 :(得分:0)

这段代码不如简单地迭代数组那么高效,但它与元素数量无关,而且更容易阅读。

final SharedPreferences sharedPref = CocktailsFrag.this.getActivity().getPreferences(Activity.MODE_PRIVATE);
//recall stored ingredients
String arrayString = sharedPref.getString("myIngredients", null);

if(arrayString ==null) {
    //do nothing
} else {
    String str1 = arrayString.replace("[", "").replace("]", "");
    List<String> strValues2 = Arrays.asList(str1.split(","));

    String drink1[] = {"Ale", "Brandy"};
    String drink2[] = {"Vodka", "Tobasco Sauce"};
    String drink3[] = {"Lager", "Stout"};
    String drink4[] = {"Guiness", "Champagne"};
    String[][] arrays = {drink1, drink2, drink3, drink4};

    for(String[] drinkArr : arrays){
        if(strValues2.containsAll(Arrays.asList(drinkArr))) {
            Toast.makeText(getActivity().getApplicationContext(), "true", Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(getActivity().getApplicationContext(), "false", Toast.LENGTH_LONG).show();
        }
    }
}

如果您想使用数组执行此操作,则只有以下一个选项。

for(String[] drinkArr : arrays) {
    boolean allDrinksFound = true;
    for(int i = 0; i < drinkArr.length; i++) {
        boolean drinkFound = false; 
        for(int j = 0; j < strValues.length; j++) {
            if(drinkArr[i].equals(strValues[j])) {
                drinkFound = true;
                break;
            }
        }
        allDrinksFound = allDrinksFound && drinkFound;
    }

    if(allDrinksFound) {
        Toast.makeText(getActivity().getApplicationContext(), "true", Toast.LENGTH_LONG).show();
    } else {
        Toast.makeText(getActivity().getApplicationContext(), "false", Toast.LENGTH_LONG).show();
    }
}
相关问题