Liststring in Dictionary mit Index auswählen

8

Ich habe eine Liste

%Vor%

Und derzeit wähle ich dies in einem Wörterbuch die folgende Struktur:

%Vor%

aber mit Linq habe ich eine etwas schlankere Art wie ToDictionary((x,index) =>

gesehen

Wie ist die richtige Syntax oder wie kann dies innerhalb einer Zeile gelöst werden?

    
c0rd 08.09.2016, 08:36
quelle

4 Antworten

12

Sie können die Überladung von Select verwenden, die den Index zum Füllen eines anonymen Typs projiziert:

%Vor%

Das ist das Gleiche wie der Code. Wenn Sie stattdessen das Ergebnis möchten, das Sie kommentiert haben: (1,a)(2,b)(3,c) ) müssen Sie +1 hinzufügen, damit ToDictionary(x => x.index+1, x => x.s) .

    
Tim Schmelter 08.09.2016, 08:39
quelle
7

Es gibt keine ToDictionary -Methode, die dies in einem einzigen Aufruf angibt, da es keine Überladungen gibt, die den Index bereitstellen, aber Sie können die Select -Überladung verwenden, die ein Func<T, int, TResult> akzeptiert:

%Vor%

Oder in C # 7, vermeiden Sie die Erstellung einer Menge von Heap-allokierten Objekten mit ValueTuple :

%Vor%

Ab C # 7.1-Point-Release können Sie den abgeleiteten ValueTuple Literalausdruck verwenden:

%Vor%

(Wie von Tim bemerkt, müssen Sie den Index um 1 anpassen, um die ursprünglich angeforderte Ausgabe zu erhalten.)

    
Jon Skeet 08.09.2016 08:43
quelle
3

Zuerst müssen Sie den Schlüssel und den Wert mithilfe der Select-Überladung abrufen Das ergibt auch den Index des aktuell verwendeten Elements:

%Vor%

Erstellen Sie nun das Wörterbuch:

%Vor%

Oder als Einzeiler:

%Vor%

EDIT: Sie können auch Ihre eigene Extension-Methode erstellen, um auch die von Ihnen angegebene Syntax zu verwenden:

%Vor%

Jetzt kannst du es so nennen:

%Vor%     
HimBromBeere 08.09.2016 08:41
quelle
2

Sie können diesen Ansatz auch ohne anonymen Typ verwenden:

%Vor%     
Vitaly Maximov 08.09.2016 10:00
quelle

Tags und Links