C# Array erstellen - Wochentage und Temperatur?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Ich würde ehrlich gesagt ein Dictionary erstellen. Dies ist im Grunde nichts anderes, als ein assoziatives Array, heißt, statt dem Index, kannst du einen beliebigen Typ als Key wählen. Als Key nutzt du ein Enum, welches alle Wochentage auflistet.

using System;
using System.Collections.Generic;

public class Test { private enum Days { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday };
public static void Main() { var temperaturesPerWeek = new Dictionary[Days, int]{ // spitze Klammern!
{ Days.Monday, 17 }, { Days.Tuesday, 22 }, { Days.Wednesday, 10 }, { Days.Thursday, 19 }, { Days.Friday, 21 }, { Days.Saturday, 22 }, { Days.Sunday, 27 } };
foreach(var data in temperaturesPerWeek){ Console.WriteLine(data.Key.ToString() + ": " + data.Value); } } }

Statt | solltest du natürlich die Spitzen Klammern nutzen! In dem Editor von GF sind sie leider nicht erlaubt.

Um dem Dictionary nicht inital einen Wert zuweisen, gibt es entweder die Methode Add oder den Indexer:

temperaturesPerWeek[Days.Monday] = 19;

Weitere Informationen zu Dictionarys findest du in der Dokumentation von Microsoft: https://msdn.microsoft.com/de-de/library/xfhwa508(v=vs.110).aspx

ANDROUDT 
Fragesteller
 03.09.2016, 15:35

Danke,

Das werde ich gleich mal Ausprobieren. 

Aber geht sowas auch mit dem Array? 

0
regex9  03.09.2016, 20:43
@ANDROUDT

Nein.

Du kannst höchstens in Kombination mit einem Enum arbeiten:

using System;

public class Test { private enum Weekdays { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday };
public static void Main() { var days = Enum.GetValues(typeof(Weekdays)); int[] temperatures = new int[days.Length];
foreach(var day in days) { Console.WriteLine(string.Format("{0}: {1}", day.ToString(), temperatures[(int)day])); } } }
1
regex9  03.09.2016, 20:57
@regex9

Oder du erstellst dir ein Struct / eine Hilfsklasse, die Temperatur und Name des Wochentags speichert. Dann erstellst du ein Array, welches diesen neuen Typ aufnimmt:

using System;

public struct DayData {
public string Day;
public int Temperature;
}
public class Test
{
public static void Main()
{
DayData[] days = new DayData[] {
new DayData { Day = "Monday", Temperature = 22 },
new DayData { Day = "Tuesday", Temperature = 23 },
new DayData { Day = "Wednesday", Temperature = 19 },
new DayData { Day = "Thursday", Temperature = 22 },
new DayData { Day = "Friday", Temperature = 26 },
new DayData { Day = "Saturday", Temperature = 27 },
new DayData { Day = "Sunday", Temperature = 21 }
};
foreach(var day in days)
{
Console.WriteLine(string.Format("{0}: {1}", day.Day, day.Temperature));
}
}
}
0

Erstelle noch ein array des typen String in dem du für jeden Wochentag, den String eines Wochentags speicherst. Außerdem "i+1" wird nicht funktionieren, da man somit über das Array Limit hinaus kommt wenn i = anzahl -1 ist.

ANDROUDT 
Fragesteller
 03.09.2016, 15:30

Danke für die Antwort. :-)

Wie würde es denn dann aussehen? 

Ich habe keinen Plan wie es mit String Array gehen soll...

0
regex9  03.09.2016, 20:49
@ANDROUDT
using System;

public class Test { public static void Main() { string[] weekdays = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" }; int[] temperatures = new int[weekdays.Length];
for(int i = 0; temperatures.Length > i; ++i) Console.WriteLine(string.Format("{0}: {1}", weekdays[i], temperatures[i]));
} } }
1

Würde ich anders machen! Speicher doch deine Wochentage in einem Enum!

Montag die 0, Dienstag die 1, Sonntag die 6.

Dann nimmste dein Array und schreibst dir da die Temperaturen rein.

Dann fragst du noch ab, was im enum die (bsp:) 3 ist und dann weißt du auch den tag dazu

ANDROUDT 
Fragesteller
 03.09.2016, 15:32

Vielen Dank, 

Würde es auch nur mit Array und einer Schleife gehen? 

Das mit dem Enum werde ich aber versuchen zu realisieren. 

0
Omnivore13  03.09.2016, 15:40
@ANDROUDT

Ja klar geht das auch. Entweder machst du eine eigene Klasse mit Wochentag und Temperatur als Eigenschaften

Oder du nimmst 2 Arrays und speicherst beides parallel

Oder du nimmst eine sortedList

Oder mit Enum probieren

Es gibt verschiedene Ansatzwege

1