C# - Visa ett antal objekt ur en Array?

Permalänk
Medlem

C# - Visa ett antal objekt ur en Array?

Hej!

Jag undrar om någon här vet hur man visar ett visst antal objekt i en array.

T.ex. Så ska jag visa upp topp 10 av alla nummer som finns i min array i en messagebox men det finns 15 nummer i array:en.
Hur sätter jag en limit på hur mycket som kan visas upp?

Permalänk
Inaktiv

Hej FlawleX,

Om vi tar tillexempel dessa 15 värden

8, 15, 2, 26, 85, 18, 95, 45, 87, 24, 84, 32, 38, 71, 52

Menar du alltså att du vill visa dessa:
8, 15, 2, 26, 85, 18, 95, 45, 87, 24

Detta kan man ju göra genom en loop.

Om du menade:
95, 85, 84, 71, 52, 45, 38, 32, 26, 24

Så kan man ju göra detta tex genom
bubble sort.

Permalänk
Avstängd
Skrivet av FlawleX:

Hej!

Jag undrar om någon här vet hur man visar ett visst antal objekt i en array.

T.ex. Så ska jag visa upp topp 10 av alla nummer som finns i min array i en messagebox men det finns 15 nummer i array:en.
Hur sätter jag en limit på hur mycket som kan visas upp?

tex så här (förutsätter att arrayen är sorterad när loopens startas):

for (int i = 0; i < 10; i++) { var value = minArray.ElementAtOrDefault(i); if (value != null) { MessageBox.Show(value.ToString()); } }

För att sortera en array innehållandes enbart integers skriver du

minArray.Sort()

Annars används förslagsvis:

minArray.OrderBy(x => x.sorteringsVardet)

Permalänk
Medlem
Skrivet av anon180324:

Hej FlawleX,

Om vi tar tillexempel dessa 15 värden

8, 15, 2, 26, 85, 18, 95, 45, 87, 24, 84, 32, 38, 71, 52

Menar du alltså att du vill visa dessa:
8, 15, 2, 26, 85, 18, 95, 45, 87, 24

Detta kan man ju göra genom en loop.

Om du menade:
95, 85, 84, 71, 52, 45, 38, 32, 26, 24

Så kan man ju göra detta tex genom
bubble sort.

Array:en är sorterad genom QuickSort och reversad så att den visar största talet först.

Bild:

Som ni ser visas mer än 10 tal. Det jag vill göra är att minska det till 10.

Skrivet av ginux1234:

tex så här (förutsätter att arrayen är sorterad när loopens startas):

for (int i = 0; i < 10; i++) { var value = minArray.ElementAtOrDefault(i); if (value != null) { MessageBox.Show(value.ToString()); } }

För att sortera en array innehållandes enbart integers skriver du

minArray.Sort()

Annars används förslagsvis:

minArray.OrderBy(x => x.sorteringsVardet)

Din kod fungerar men alla värden visas inte samtidigt. Det första visas i en messagebox som sedan stängs ner, sen kommer andra värdet i en ny messagebox, osv. Har ju iofs med for loopen att göra.

Permalänk
Avstängd
Skrivet av FlawleX:

Array:en är sorterad genom QuickSort och reversad så att den visar största talet först.

Bild:
http://img850.imageshack.us/img850/6131/78055871.png

Som ni ser visas mer än 10 tal. Det jag vill göra är att minska det till 10.

Din kod fungerar men alla värden visas inte samtidigt. Det första visas i en messagebox som sedan stängs ner, sen kommer andra värdet i en ny messagebox, osv. Har ju iofs med for loopen att göra.

Då får du väl ändra min kod tills den passar... Men bara för att jag är en så fin människa och det är helg så ska jag curla dig lite.

private void displayTopList(IList<int?> numberList, int topCount) { var sb = new StringBuilder(); for (int i = 0; i < topCount; i++) { var value = numberList.ElementAtOrDefault(i); if (value != null) { sb.AppendLine(value.ToString()); } } MessageBox.Show(sb.ToString()); }

Anropa med:

displayTopList(prepareToDisplay, 10);

tamdadadam!

Permalänk
Inaktiv

Denna kan deletas då TS redan fått svar.

Permalänk
Medlem
Skrivet av ginux1234:

Då får du väl ändra min kod tills den passar... Men bara för att jag är en så fin människa och det är helg så ska jag curla dig lite.

private void displayTopList(IList<int?> numberList, int topCount) { var sb = new StringBuilder(); for (int i = 0; i < topCount; i++) { var value = numberList.ElementAtOrDefault(i); if (value != null) { sb.AppendLine(value.ToString()); } } MessageBox.Show(sb.ToString()); }

Anropa med:

displayTopList(prepareToDisplay, 10);

tamdadadam!

Tack så mycket för att du tar din tid att hjälpa en total noob.

Koden verkar fungera men problemet är att ... låt mig förklara min kod så blir det lättare.

Användaren skriver in nummer i textboxen som sedan sparas när man trycker på "Press To Save", allt sparas i en .txt fil.
.txt filen hämtas sedan och lagras i en string array.
Sedan så görs string array:en om till en double array genom en for loop som double.parse:ar alla strings till doubles.
Sedan så sorteras Array:en med QuickSort.
Efter det så görs den sorterade double Array:en om till en string array genom ytterliggare en for loop.

Errors jag får just nu:

The best overloaded method match for 'WindowsFormsApplication1.Form1.displayTopList(System.Collections.Generic.IList<int?>, int)' has some invalid arguments.

Cannot convert from 'string[]' to 'System.Collections.Generic.IList<int?>

Återigen tack för all hjälp!

Permalänk
Avstängd
Skrivet av FlawleX:

Tack så mycket för att du tar din tid att hjälpa en total noob.

Koden verkar fungera men problemet är att ... låt mig förklara min kod så blir det lättare.

Användaren skriver in nummer i textboxen som sedan sparas när man trycker på "Press To Save", allt sparas i en .txt fil.
.txt filen hämtas sedan och lagras i en string array.
Sedan så görs string array:en om till en double array genom en for loop som double.parse:ar alla strings till doubles.
Sedan så sorteras Array:en med QuickSort.
Efter det så görs den sorterade double Array:en om till en string array genom ytterliggare en for loop.

Errors jag får just nu:

The best overloaded method match for 'WindowsFormsApplication1.Form1.displayTopList(System.Collections.Generic.IList<int?>, int)' has some invalid arguments.

Cannot convert from 'string[]' to 'System.Collections.Generic.IList<int?>

Återigen tack för all hjälp!

n00b!

Felet är precis som det står, min funktion vill ha en lista av null-bara int ("IList<int?>") men du skickar in en string-array ("string[]").

Den här koden borde göra som du vill:

private void displayTopList(string[] msgList, int topCount) { var sb = new StringBuilder(); for (int i = 0; i < topCount; i++) { var value = msgList.ElementAtOrDefault(i); if (string.IsNullOrEmpty(value) == false) { sb.AppendLine(value); } } MessageBox.Show(sb.ToString()); }

Permalänk
Medlem
Skrivet av ginux1234:

n00b!

Felet är precis som det står, min funktion vill ha en lista av null-bara int ("IList<int?>") men du skickar in en string-array ("string[]").

Den här koden borde göra som du vill:

private void displayTopList(string[] msgList, int topCount) { var sb = new StringBuilder(); for (int i = 0; i < topCount; i++) { var value = msgList.ElementAtOrDefault(i); sb.AppendLine(value); } MessageBox.Show(sb.ToString()); }

!

Funkar PERFEKT! Tack så hemskt mycket!

Permalänk
Medlem

Finns mycket fin hjälp i .NET när man jobbar med samlingar.

i ditt fall vill du bara hr 10 element ur din array och då kan man köra:

dinArray.Take(antal);

Då får bara det antal element du vill ha.

Så med liten remake på ginux1234 kod så kan man få:

private static StringBuilder PrepArrString<T>(IEnumerable<T> arr, int rows, StringBuilder message) { foreach (var item in arr.Take(rows)) message.Append(item + ", "); return message; }

Som anropas enkelt:

message = PrepArrString(arr, 10, sb);

EDIT: Skriver som en apa..

Visa signatur

En Laptop