Структура данных для подсчета случаев - PullRequest
1 голос
/ 26 мая 2019

скажем, у меня есть массив

[bob, alice, jeff, bob, bob]

Я хотел бы преобразовать этот массив в

[bob, alice, jeff, bob1, bob2]

То есть, определение вхождений.

// iterate through array
// check if element is in finalArray
     // if not add to finalArray
// if found in final array
    // add in duplicateArray
   // check instances of element in duplicateArray and add that number to element
   // insert element+updated number to finalArray

Это моя реализация вышеуказанного алгоритма

     ArrayList<String> list = new ArrayList<>();
    list.add("Bob");
    list.add("Jane");
    list.add("Smith");
    list.add("Bob");
    list.add("Bob");
    list.add("Jane");
    list.add("Smithery");

    ArrayList<String> finalList = new ArrayList<>();
    ArrayList<String> tempList = new ArrayList<>();

    for(String name : list) {
        if(finalList.contains(name)) {
            int count = 0;
            tempList.add(name);
            for(int i=0; i < tempList.size(); i++) {
                if(tempList.get(i) == name) {
                    count++;
                }
            }
            String tempName = name + count;
            finalList.add(tempName);
        } else {
            finalList.add(name);
        }
    }
    for(String name: finalList) {
        System.out.println(name);
    }

У меня вопрос, хотя ArrayList, а в других структурах данных есть метод .contains, есть ли в каких-либо структурах данных методы, которые возвращают количество экземпляров элемента в структуре данных?

Ответы [ 2 ]

0 голосов
/ 29 мая 2019

Это моя текущая реализация кодирования, которая работает.

     ArrayList<String> list = new ArrayList<>();
    list.add("Bob");
    list.add("Jane");
    list.add("Smith");
    list.add("Bob");
    list.add("Bob");
    list.add("Jane");
    list.add("Smithery");

    ArrayList<String> finalList = new ArrayList<>();
    ArrayList<String> tempList = new ArrayList<>();

    for(String name : list) {
        if(finalList.contains(name)) {
            int count = 0;
            tempList.add(name);
            for(int i=0; i < tempList.size(); i++) {
                if(tempList.get(i) == name) {
                    count++;
                }
            }
            String tempName = name + count;
            finalList.add(tempName);
        } else {
            finalList.add(name);
        }
    }
    for(String name: finalList) {
        System.out.println(name);
    }
0 голосов
/ 26 мая 2019
List<String> data = ...;
List<String> finalData = new ArrayList<>();
Map<String, Integer> counts = new HashMap<>();

for(String s : data) {
    counts.merge(s, 1, Integer::sum);  // Keep track of occurences seen

    int occurences = counts.get(s);  // Get how many there are for s

    if(occurences == 1) { 
        finalData.add(s);
    }
    else {  // if more than 1, change the string
        finalData.add(s + (occurences - 1));
    }
}

Теперь реальный вопрос заключается в том, что происходит, когда у вас дважды есть «Боб» в списке, а «Боб1» также находится в исходном списке ...

...