2017-12-29 4 views
0

Ich habe Probleme, korrekte Beispiele zum Einfügen von Daten in Google Tabellen mithilfe der Google Spreadsheet API v4 zu finden.So übersetzen Sie eine Wörterbuchliste in eine Liste <IList <object>> für Google Spreadsheet-API

Das Beispiel in docs Google ist die folgende:

Data.ValueRange requestBody = new Data.ValueRange(); 
requestBody.Values = new List<IList<object>> { }; 

SpreadsheetsResource.ValuesResource.AppendRequest sheetRequest = service.Spreadsheets.Values.Append(requestBody, spreadsheetId, rangeClasses); 
sheetRequest.ValueInputOption = valueInputOption; 
sheetRequest.InsertDataOption = insertDataOption; 

Einfügen von Zeichenfolgen in der requestBody.Values Liste funktioniert gut. Aber ich würde gerne eine Dictionary<int,int> in etwas kompatibles mit Data.ValueRange übersetzen.

Irgendeine Idee?

+0

Wie sieht Ihr Wörterbuch aus? Welcher Typ ist es? Wie genau haben Sie erwartet, dass es eingefügt wird? –

+1

Die Frage ist ein wenig unterspezifiziert (oder vielleicht ist es mein Mangel an Wissen über Goolge API). Welche Werte müssen Sie in die Anfrage eingeben? Die _values_ des Wörterbuchs oder auch die _keys_? Sollten diese Werte in einer "IList" der "List >" oder in einem einzelnen "IList" stehen? –

+0

@MattBurland ist es ein Wörterbuch von ganzzahligen Schlüsseln und ganzzahligen Werten, z. : [1000,2040] [2000,19] [3000,22] Ich möchte es einfach als zwei Spalten, eine für Schlüssel, eine für Werte setzen. Als ob ich das Wörterbuch von einem Foreach drucken wollte 'foreach (KeyValuePair KVP im Wörterbuch) { Console.Writeline (kvp.key +", "+ kvp.Value); } ' – AlexandreG

Antwort

0

Ihre Frage Unter der Annahme ist, wie eine Dictionary<T,S> in eine List<List<object>> drehen, dann können Sie etwas tun:

var list = dic.Select(d => new object[] { d.Key, d.Value }); 

Dass Sie ein Wörterbuch wie folgt drehen:

{ 
    "foo":1, 
    "bar":2 
} 

in ein Array wie folgt:

[ 
    [ "foo", 1 ], 
    [ "bar", 2 ] 
] 

Ein wichtiger Vorbehalt hier ist jedoch, dass Wörterbücher sind ungeordnet, so gibt es keine Garantie, dass wenn Sie es mit Select iterieren, erhalten Sie die Schlüssel in der gleichen Reihenfolge, wie Sie sie einlegen. So könnten die Schlüssel in beliebiger Reihenfolge sein.

Wenn Sie sie brauchen, um in Reihenfolge zu sein, müssten Sie ein Array mit den Schlüsseln in der Reihenfolge erstellen, die Sie benötigen, und verwenden Sie das dann, um Ihre Liste zu erstellen. Zum Beispiel:

var orderedList = new [] { "foo", "bar" }.Select(k => new object[] { k, dic[k] }); 
//       ^^^^^^^^^^^^ these are the keys in the order I want! 
+0

Danke matt! Leider bekomme ich folgende Fehlermeldung: 'kann nicht implizit Typ umwandeln‚System.Collections.Generic.IEnumerable ‘auf‚System.Collections.Generic.IList >‘' Mein Wörterbuch ist und Reihenfolge ist nicht wirklich wichtig :) – AlexandreG

+0

@AlexadreG: meine schlechte, halt einfach eine 'ToList()' am Ende. Wenn Sie darüber nachdenken, könnten Sie 'neue Liste ' statt 'neues Objekt []' –

+0

Almost!Ich erhalte jetzt den folgenden Fehler: Der Typ 'System.Collections.Generic.List >' kann nicht implizit in 'System.Collections.Generic.IList konvertiert werden > '. Eine explizite Konvertierung existiert (fehlt eine Besetzung?) – AlexandreG

Verwandte Themen