webForumDet fria alternativet
Logga in / Bli medlem

Sortera strängar i en matris

Java

5 svar · 512 visningar · startad av Mc Fetto

Medlem sedan nov. 20022 355 inlägg
Frågan#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!

Medlem sedan juni 20008 205 inlägg
#2

Kolla in interfacet Comparator och sort-metoden i List.

Medlem sedan nov. 20022 355 inlägg
#3

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

Medlem 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.

Medlem 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å!

Medlem 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()

262 ms totalt · 4 externa anrop · v20260731065814-full.5386d3bf
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)