2015-10-15 4 views
0

У меня есть два массива, где один массив представляет собой коллекцию имен, а другой описывает связанные с ними метки. Мне нужно сортировать метки внутри массива в порядке возрастания, а затем также соответствующие имена связанных с отметками.Создание списка рангов путем сортировки массива

Моя цель - создать список рангов. Я использую Обработку, чтобы сделать это

float sum = 0; 

String [] name = {"A", "B", "C", "D","E"}; 
float [] mark = {12, 2, 4, 6, 23}; 

void setup() { 

    size(600, 600); 
    smooth(); 
} 

void draw() { 
    background(225); 
    fill(0); 
    println(name.length); 
    for (int i =0; i<name.length; i++) { 
    text(name[i] + ":"+ mark[i], 100, 100+i*50); 
    } 
} 

/////// i wanted to sort it as E:23, A:12, D:6,  C:4,  B:2 

Было бы здорово, если бы кто-то мог мне помочь в этом. :)

Большое спасибо заранее, Юсуф

+1

Не мог бы вы указать язык в тегах, пожалуйста? Похоже на C, но вы хотите быть уверенным ... Кроме того, различные функции, которые вы используете, выглядят из библиотеки - возможно, библиотеки обработки? –

+0

Привет @MichaelDorgan Я использую обработку, основанную на Java –

+0

Почему вы используете два 'массива'? [Карты] (http://docs.oracle.com/javase/7/docs/api/java/util/Map.html) было бы намного лучшим выбором. – sam

ответ

1

Вы можете сделать класс держатель данных реализации Comparable. Я думаю, вы также можете использовать карту, как hashMap.

Здесь в данном классе держателя Например:

import java.util.Collections; 

ArrayList <Data> d = new ArrayList<Data>(); 

void setup() { 
    size(600, 600); 

    d.add(new Data("A", 12)); 
    d.add(new Data("B", 2)); 
    d.add(new Data("C", 4)); 
    d.add(new Data("D", 6)); 
    d.add(new Data("E", 23)); 



    println("before sorting:\n" + d); 

    //used reverseOrder as it goes decrescent, but you could just reverse 
    //the "natural" order in the class it self. Exchange -1 and 1 in compareTo() 
    // and use Collections.sort(d); here 
    Collections.sort(d, Collections.reverseOrder()); 

    println("after sorting:\n" + d); 
} 


/////// i wanted to sort it as E:23, A:12, D:6,  C:4,  B:2 


class Data implements Comparable { 
    String name; 
    int mark; 

    Data(String _n, int _m) { 
    name = _n; 
    mark = _m; 
    } 

    // this sets the 'natural' order of Data 
    @Override 
    int compareTo(Object o) { 
    Data other = (Data) o; 

    if (other.mark > mark) { 
     return -1; 
    } else if (other.mark < mark) { 
     return 1; 
    } 
    return 0; 
    } 


    // this to get a nice looking output in console... 
    @Override 
    String toString() { 
    return name + ":" + nf(mark, 2); 
    } 
} 
+0

Большое спасибо @ v.k. код работает хорошо. Теперь я должен начать узнавать о картах :) –

+0

Существует также [intDict] (https://processing.org/reference/IntDict.html), который вы можете попробовать –

Смежные вопросы