webForumDet fria alternativet

Sortera strängar i en matris

5 svar · 512 visningar · startad av Mc Fetto

Mc FettoMedlem sedan nov. 20022 355 inlägg
#1

Jag har en ArrayList som innehåller arraylists där varje arraylists innehåller ord som simulerar en rad.

Nu vill jag sortera matrisen i alfabetisk ordning, hoppas någon förstår! Någon som vill hjälpa mig på traven?

Alltså jag använder mig av en enkel selectionsort:

for (int i=0; i<shift.getLineCount()-1; i++) {

			int min = indexOfMin(i);

			tmpArr = shift.getLine(min);
			shift.setLine(shift.getLine(i), min);
			shift.setLine(tmpArr, i);
		}

Där shift innehåller matrisen.

Det jag har problem med är att hitta minsta index (alltså minsta värdet på strängarna) :

	private int indexOfMin(int start) 
	{
		
		int minIndex = start;
		boolean check = false;
		for (int i=start+1; i<shift.getLineCount(); i++) 
		{
			
			int word=0;			
			for (word=0;word<=shift.getLine(i).size();word++)
			{
								
				int ch=0;
				for (ch=0;ch<shift.getWord(i, word).length();ch++)
				{
//					if (ch == shift.getWord(minIndex,word).length()-1 & ch == shift.getWord(i,word).length()-1 & (shift.getWord(i,word).charAt(ch) == shift.getWord(minIndex,word).charAt(ch)))
//					{
//						break;
//					}
					if (ch == shift.getWord(minIndex,word).length()-1)
					{
						//minIndex=i;
						check=true;
						break;
					}
					else if (shift.getWord(i,word).charAt(ch) < shift.getWord(minIndex,word).charAt(ch))
					{ 
						minIndex = i;
						check=true;
						break;
						
					}
					
					if (check)
						break;
				}
				if (check)
					break;
				
			}
			
				

			 
		}		
		return minIndex;
	}

Denna kodsnutt är helt på tok, men jag har provat o provat men får det inte helt rätt!

spangoMedlem sedan juni 20008 205 inlägg
#2

Kolla in interfacet Comparator och sort-metoden i List.

Mc FettoMedlem sedan nov. 20022 355 inlägg
#3

Comparator, kan den känna av en hel arraylist eller strän för sträng?

spangoMedlem sedan juni 20008 205 inlägg
#4

Den är agnostisk i frågan... den sorterar objekten i en ArrayList, vilket i ditt fall således skulle kunna vara andra ArrayLists. Om du vill sortera dessa i bokstavsordning, låter du din compare-metod se ut typ så här:

public int compare(Object a, Object b){
    List listA = (List) a;
    List listB = (List) b;
    return ((String)listA.get(0)).compareTo(listB.get(0));
}

Använder du den för att sortera den yttre listan sorterar den efter första elementet i varje "underlista". Kommer även att krasha om det finns tomma rader, men jag hoppas att du förstår poängen. Kolla dokumentationen för de olika metoderna.

Mc FettoMedlem sedan nov. 20022 355 inlägg
#5

Problemet är att jag vill sortera den yttre listan men om de första objekten i underlistan är "lika" så måste jag kolla nästa objekt också!

Mc FettoMedlem sedan nov. 20022 355 inlägg
#6

Löste problemet genom att i shift göra en metod som gör varje rad i matrisen till en string och sedan kan jag kolla dem med compareTo()

137 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)