求一个小算法。
用户角色ID    角色对应权限数数量
1         47
2         22
3         6
4         17
5         33
.               .
.               .
.               .
.               .
根据角色对应的权限数量的多少来给角色排个序
比如角色1,它有47个权限,那么角色1当然最大,然后角色5,有33个权限,那么它就排在老二。角色2有22个权限,那么它是老三。
通过对权限数量的排序给角色ID排个序,我再根据角色ID查出角色中文名返回给前台,让用户对哪个角色的权力大有个印象。
我想了一会还真没什么好办法,不知道CSDN的大神们有没有高招。拜谢。

解决方案 »

  1.   

    你把角色ID放到一个数组
    角色的权限也放大另一个数组
    这2个数组长度一样,同一个索引下存的是 角色ID  和 权限
    给权限排序的时候 角色ID对应的索引也跟着同步变化不就可以了
      

  2.   

    呵呵,2楼的兄弟说的很对,数据库里加个order by就完事了。
    但是我要是就用java排呢?因为我感觉不是很复杂,但是自己却没想出来感觉不舒服。就是想研究一下。
      

  3.   

    LZ做个参考吧public class MapSorttingDemo {
    public static void main(String[] args) {
    List roles = new ArrayList();
    roles.add(new Role(1, 47));
    roles.add(new Role(2, 22));
    roles.add(new Role(3, 6));
    roles.add(new Role(4, 17));
    roles.add(new Role(5, 33));
    Collections.sort(roles);  //排序
    for ( Object r : roles)
    System.out.println(((Role)r).getId());
    }
    }
    class Role implements Comparable{
    private int id;
    public int getId() {
    return id;
    }
    public void setId(int id) {
    this.id = id;
    }
    public int getWeight() {
    return weight;
    }
    public void setWeight(int weight) {
    this.weight = weight;
    }
    private int weight;
    public Role (int id, int weight){
    this.id = id;
    this.weight = weight;
    }
    @Override
    public int compareTo(Object o) {  //根据权重排序
    return Integer.signum(((Role)o).weight - weight);
    }
    }
      

  4.   

    楼主用可以用两个数组 int i;
    int j;
    int t;
    //角色对应权限数数量
    int[] a={47,22,6,17,33};
    //用户角色ID
    int[] b={1,2,3,4,5};
    for(i=0;i<a.length-1;i++)
    {
    for(j=i+1;j<a.length;j++)
    {
    if(a[i]<a[j])
    {
    t=a[i];
    a[i]=a[j];
    a[j]=t;
    t=b[i];
    b[i]=b[j];
    b[j]=t;
    }
    }
    }
    for(i=0;i<a.length;i++)
    {
    System.out.println(a[i]+" "+b[i]);
    }
      

  5.   

    典型的数据库应用。不知何故一定要java?
      

  6.   

    以前写的一个类,给你吧。public class OrderBy<T> implements Comparator<T>{ private String fieldName ="";


    public String getArgs() {
    return fieldName;
    } public void setArgs(String args) {
    this.fieldName = args;
    } public OrderBy(String str){

    fieldName = str;
    }

    public OrderBy(){
    System.out.println("OrderBy done...");
    }
    public int compare(T o1, T o2) {
    // TODO Auto-generated method stub
    System.out.println("compare done...");
    Object obj1 = this.invokeMethod(o1, fieldName, new Object[0]);
    Object obj2 = this.invokeMethod(o2, fieldName, new Object[0]);
    System.out.println(obj1.toString() + " " + obj2.toString());
    if(obj1 == null || obj2 == null){
    return 0;
    }else{
    return obj1.toString().compareTo(obj2.toString());
    }
    }

    @SuppressWarnings("unchecked")
    private Object invokeMethod(T obj,String methodName, Object[] args){       
        Object object = null;
    @SuppressWarnings("rawtypes")
    Class ownerClass = obj.getClass();   
        @SuppressWarnings("rawtypes")
    Class[] argsClass = new Class[args.length];   
            for(int i = 0, j = args.length; i < j; i++) {   
            argsClass[i] = args[i].getClass();   
         }      
        Method method;
    try {
    methodName = "get" + methodName;
    method = ownerClass.getMethod(methodName, argsClass);
    object = method.invoke(obj, args);   
    } catch (SecurityException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (NoSuchMethodException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IllegalArgumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IllegalAccessException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (InvocationTargetException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } finally{
    }
    return object;     
    }

    }
    可对类的字段进行排序,返回一个list。注意传入的str是你要排序的属性,get +str等于你的get方法的名字。例如根据你的id排序,对应的get方法为getId,所以要传入Id,这样写OrederBy<User> ob = new OrederBy<User>("Id")。这样使用Collections.sort(list, ob);其中list是你需要排序的列表。 
      

  7.   

    5楼和7楼的都不错。7楼在算法上可能更考究些
    但是5楼的写法比较“Java”,我非常喜欢。
    总之谢谢大家了,我也不为别的,就是交流一下。
      

  8.   

    我的看法正好相反,尽量使用Comparator而不是Comparable。有点类似设计模式“Composition VS inheritance”