2016-06-20 6 views
1

Ich habe ein Objekt mit einer Eigenschaft vom Typ DateTime [] und einem mit Dezimal [], die Länge dieser Arrays wird gleich sein und jeder Indexwert entspricht anderen Array-Indexwerten.Wie richtet man zwei Array-Indizes aus?

Ich möchte das Dezimal [] basierend auf der Filterung von DateTime [] erhalten, was wäre der beste Weg, dies zu tun?

Danke !!!

+0

Können Sie erklären, über welche Filterung Sie sprechen? Wenn Sie den Index des DateTime-Elements kennen, warum können Sie nicht einfach denselben Index für den Dezimalindex verwenden? – itsme86

+1

Wenn diese 'DateTime'- und' Dezimal'-Werte zusammenhängen, sollten Sie darüber nachdenken, sie in eine einzelne 'Klasse' zu ​​platzieren und ein' Array' anstelle von 2 zu haben. –

+2

"Der beste Weg" ist wahrscheinlich ein einzelnes Array einer benutzerdefinierten Klasse enthält eine DateTime und eine Dezimalzahl. – ryanyuyu

Antwort

5

Sie wahrscheinlich suchen Zip:

DateTime[] dates = ... 
    decimal[] decimals = ... 

    var result = dates 
    .Zip(decimals, (date, dec) => new { 
      date = date, 
      value = dec 
     }) 
    .Where(item => ...) // The required filter here, e.g. item.date.Year == 2016 
    .Select(item => item.value); 

bearbeiten: Bei Array index erforderlich (siehe Kommentare unten), kann man es in Where hinzufügen:

... 
    .Where((item, index) => ...) // Put filter, e.g. item.date.Year == 2016 || index > 3 
    ... 
+0

Ja, das ist, was ich gesucht habe. Vielen Dank. Gibt es eine Möglichkeit, die Indexnummer auch innerhalb der Zip-Funktion zu erhalten? – Deepak

+0

@Deepak: Wenn Sie Array 'Index' sowie Datum wollen, verwenden Sie einfach' index' in 'Where' (siehe meine Bearbeitung) –

+0

Dmitry Bychenko eine Abfrage, die Where-Bedingung in Ihrem Beispiel, wird es nach dem Zip laufen oder davor? – Deepak

0

Ich würde lieber List verwenden, aber wenn Sie wirklich an Arrays bleiben möchten:

DateTime[] dateArray = new DateTime[10]; 
decimal[] decArray = new decimal[10]; 

DateTime someDate = new DateTime(1999, 10, 23); 

decimal item_from_array = decArray[dateArray.ToList().IndexOf(someDate)]; 

, wenn Sie einen Filter benötigen, können Sie die Find Methode verwenden:

decimal item_from_array_filter = decArray[dateArray.ToList().IndexOf(dateArray.ToList().Find(x=>x.Year == 1999))]; 

Version 2, wenn Sie eine Liste verwenden würde.

List<DateTime> dateList = new List<DateTime>(); 
decimal item = decArray[dateList.IndexOf(someDate)]; 
Verwandte Themen