在数组中搜索值并获取数组名称

时间:2016-04-20 05:27:33

标签: java android arrays data-structures

String[] lac1 = {"1", "101", "1101"};
String[] lac2 = {"2", "102", "1102"};
String[] lac3 = {"3", "103", "1103","8", "108", "1108"};

我想在上面的数组中搜索一个值,并获取找到该值的数组列表的数组名称。

e.g。 如果我正在搜索值为102的值,它应该查看所有上面的数组,并在上面的任何数组列表中找到一个数组名称。

或者,如果您可以帮助我获得上述案例的最佳数据结构。

6 个答案:

答案 0 :(得分:1)

如果您只使用三个数组,则只需使用if条件

String arraname="";
if (Arrays.asList(lac1).contains("102")) {
arraname="lac1";
 }
if (Arrays.asList(lac2).contains("102")) {
arraname="lac2";
 }
if (Arrays.asList(lac3).contains("102")) {
 arraname="lac3";
}

答案 1 :(得分:0)

我认为解决问题的最佳数据结构是使用字典。 在java中:

Map<int, String> dictionary = new HashMap<int, String>();
//put the data in..

//check existence
string value = map.get(key);
if (value != null) {
   ...
} else {
   // No such key
}

答案 2 :(得分:0)

如果您想要更好的数据结构来存储这些详细信息,我会建议Map,密钥为String,值为List<String>

Map<String,List<String>> map = new HashMap<String,List<String>>();

map.put("lac1",lac1List);
map.put("lac2",lac2List);
map.put("lac3",lac3List);

您可以迭代地图并找到所需的密钥。

String val; // value to be search
for(Entry<String,List<String>> entry : map.entrySet()){
    if(entry.value().contains(val)){
        System.out.println(val+" Present in "+entry.key());
        break;
    }
}

答案 3 :(得分:0)

对于数组,您可以尝试for循环

public static void main(String[] args) {
    String[] lac1 = {"1", "101", "1101"};
    String[] lac2 = {"2", "102", "1102"};
    String[] lac3 = {"3", "103", "1103","8", "108", "1108"};
    int pos = -1;
    if ((pos = getPostion(lac1, "102")) > -1) {
        System.out.println("array lac1 , pos:" + pos);
    } else if ((pos = getPostion(lac2, "102")) > -1) {
        System.out.println("array lac2 , pos:" + pos);
    } else if ((pos = getPostion(lac3, "102")) > -1) {
        System.out.println("array lac3 , pos:" + pos);
    } else {
        System.out.println("Not Found!");
    }   
}

public static int getPostion(String[] arr, String key) {
    int pos = -1;
    for (int i = 0; i < arr.length; i++) {
        if (arr[i].equals(key)) {
            pos = i;
            break;
        }
    }
    return pos;
}

<强>输出:

array lac2 , pos:1

答案 4 :(得分:0)

public String checkValueInList(String val){
    String arrayName = "";
    String[] lac1 = {"1", "101", "1101"};
    String[] lac2 = {"2", "102", "1102"};
    String[] lac3 = {"3", "103", "1103","8", "108", "1108"};

    List<String> list1 = getArrayList();
    list1.add("lac1");
    List<String> list2 = getArrayList();
    list2.add("lac2");
    List<String> list3 = getArrayList();
    list3.add("lac3");

    list1.addAll(Arrays.asList(lac1));
    list2.addAll(Arrays.asList(lac2));
    list3.addAll(Arrays.asList(lac3));

    List<List<String>> allLists = new ArrayList<>();
    allLists.add(list1);
    allLists.add(list2);
    allLists.add(list3);

    for(List<String> stringList : allLists){
        if(stringList.contains(val)){
            arrayName = stringList.get(0);
            break;
        }
    }
    return arrayName;
}

提供更多详细信息,例如如何将数组中的数据硬编码或从数据库中获取数据?有助于选择更好的收藏。您可以使用键值对和返回键值创建一个映射,而不是列表中的列表。你可以试试!

答案 5 :(得分:0)

一种简单的方法可能是:

public class mapList {
    Map<String,String> map;
    String[] lac1 = {"1", "101", "1101"};
    String[] lac2 = {"2", "102", "1102"};
    String[] lac3 = {"3", "103", "1103","8", "108", "1108"};

    public mapList(){  
        map = new HashMap<>();
        for(String l1:lac1){ map.put(l1, "lac1"); }
        for(String l2:lac2){ map.put(l2, "lac2"); }
        for(String l3:lac3){ map.put(l3, "lac3"); }        
    }

    public String search(String val){
        return map.get(val);
    }

   public static void main(String[] args) {
       mapList d=new mapList();
       System.out.println("1102 is in: " + d.search("1102"));
       System.out.println("8 is in: " + d.search("8"));
       System.out.println("101 is in: " + d.search("101"));
       System.out.println("1108 is in: " + d.search("1108"));
   }
}

结果:
     1102 位于 lac2 ;中      8 lac3 ;中      101 位于 lac1 ;中      1108 位于 lac3 ;