Avatar billede triton Nybegynder
14. maj 2005 - 20:59 Der er 7 kommentarer og
1 løsning

Sortering af treemap samt søgning

2. spørgsmål.
Jeg har et treemap der består af
String = Key
Integer = Values

Jeg skal lave en søgning i treemap der returnerer alle ord med en bestemt begyndelses string, dette output skal der derefter sorteres efter deres values, og flyttes over i et String array.

Så hvis følgende keys står i treemap:
Key      Value

Abe      1
And      2
Henrik    10
Anders    1

Der søges nu på String "a" så bliver der i første omgang returneret:

Key      Value

Abe      1
And      2
Anders    1

De skal nu sorteres til:

Key      Value

Abe      1
Anders    1
And      2

Disse keys flyttes så over i et Array hvor Abe ligger først, Anders nr 2, og And nr 3.

Her er min kode så langt. (Jeg beklager længden af spørgsmålet men håber der er en venlig sjæl der kan hjælpe)

import java.util.*;
import java.text.*;


public class Ordbog
{
    private SortedMap ordbog;
    private String[] DKOrdbog ={"Tegning","Vandfald","Træsko","Kartoffel",
                                "Cirkus","åkande","æble","Abe", "Hav","Trumpet"};
    public Ordbog()
    {
        Collator coll = Collator.getInstance(new Locale ("da", "DK"));       
        ordbog = new TreeMap<String,Integer>(coll);       
       
        loadOrdbog(DKOrdbog);               
    }
   
    public String[] søg(String ord)
    {
        String s = "";
        TreeSet ts = new TreeSet(new ValSorter());
        ts.addAll(ordbog.values());
       
        System.out.println(ts);

      // Set<Map.Entry<String,Integer>> navneSet = ts.entrySet(); //Collection view af set.
       
      // Iterator<Map.Entry<String,Integer>> ite = navneSet.iterator();
    //while (ite.hasNext())
    //s += ite.next().toString() + "\n";
       
       
               
        return null;       
    }
   
   
    public String toString()
    {
        String s = "";
        Set<Map.Entry<String,Integer>> navneSet = ordbog.entrySet(); //Collection view af set.
        Iterator<Map.Entry<String,Integer>> ite = navneSet.iterator();
    while (ite.hasNext())
    s += ite.next().toString() + "\n";
        return s;
    }
   
   
    private void loadOrdbog(String[] ordbog)
    {
        for (int i=0; i < ordbog.length; i++)
        {
            putOrd(ordbog[i]);
        }
    }
       
    public void putOrd(String ord)
    {
        ord = ord.toUpperCase();                       
        int i = 1;
       
        if (findes(ord))
        {
            i = ((Integer) ordbog.get(ord));
            i++;           
        }
                           
        ordbog.put(ord,i);               
    }
         
    private boolean findes(String ord)
    {
        ord = ord.toUpperCase();       
        return (ordbog.containsKey(ord));
    }                   
}
Avatar billede arne_v Ekspert
14. maj 2005 - 21:53 #1
lidt kode til inspiration:

package test;

import java.util.*;

public class SearchAndSort {
    public static void main(String[] args) {
        SortedMap<String,Integer> m = new TreeMap<String,Integer>();
        m.put("7", 0);
        m.put("Abe", 1);
        m.put("And", 2);
        m.put("Henrik", 10);
        m.put("Anders", 1);
        System.out.println(m);
        SortedMap<String,Integer> m2 = m.subMap("A", "B");
        System.out.println(m2);
        Object[] e = m2.entrySet().toArray();
        Arrays.sort(e, new C());
        for(int i = 0; i < e.length; i++) {
            Map.Entry<String,Integer> e2 = (Map.Entry<String,Integer>)e[i];
            System.out.println(e2);
        }
    }
}

class C implements Comparator {
    public int compare(Object o1, Object o2) {
        Map.Entry<String,Integer> e1 = (Map.Entry<String,Integer>)o1;
        Map.Entry<String,Integer> e2 = (Map.Entry<String,Integer>)o2;
        return (e1.getValue()).compareTo(e2.getValue());
    }
    public boolean equals(Object obj)  {
        return false;
    }
}
Avatar billede triton Nybegynder
16. maj 2005 - 19:46 #2
Hej Arne

Tak for kommentaren.
Jeg regnede den selv ud videre derfra.

Drop et svar så du kan få point.

Hvordan får jeg dog returneret et String Array kun med key's fra C[]?
Avatar billede arne_v Ekspert
16. maj 2005 - 19:49 #3
svar
Avatar billede arne_v Ekspert
16. maj 2005 - 19:50 #4
det sidste spørgsmål forstår jeg ikke - er det dintreemap.keySet().toArray() du spørger efter ?
Avatar billede triton Nybegynder
16. maj 2005 - 20:08 #5
Når jeg har c[] med de sorterede keys, skal jeg have dem ud i et String[]
Så jeg kan printe Strin[] med kun keys....altså et output uden values.
Abe
And
Anders

Giver det mening?
Avatar billede arne_v Ekspert
16. maj 2005 - 20:17 #6
som det her:

package test;

import java.util.*;

public class SearchAndSort {
    public static void main(String[] args) {
        SortedMap<String,Integer> m = new TreeMap<String,Integer>();
        m.put("7", 0);
        m.put("Abe", 1);
        m.put("And", 2);
        m.put("Henrik", 10);
        m.put("Anders", 1);
        System.out.println(m);
        SortedMap<String,Integer> m2 = m.subMap("A", "B");
        System.out.println(m2);
        Object[] k = m2.keySet().toArray();
        Arrays.sort(k);
        for(int i = 0; i < k.length; i++) {
            String k2 = (String)k[i];
            System.out.println(k2);
        }
    }
}

?
Avatar billede triton Nybegynder
16. maj 2005 - 21:27 #7
Super tak for svaret.
Avatar billede triton Nybegynder
16. maj 2005 - 21:27 #8
.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester