2009-07-13 2 views
2

Как «преобразовать» словарь в последовательность, чтобы я мог сортировать по значению ключа?Как «преобразовать» словарь в последовательность в F #?

 
let results = new Dictionary() 

results.Add("George", 10) 
results.Add("Peter", 5) 
results.Add("Jimmy", 9) 
results.Add("John", 2) 

let ranking = 
    results 
    ??????? 
    |> Seq.Sort ?????? 
    |> Seq.iter (fun x -> (... some function ...)) 

ответ

20

< System.Collections.Dictionary K, V> является IEnumerable < < KeyValuePair K, V >> и F # Активный шаблон 'KeyValue' полезен для разрушения объектов KeyValuePair, так:

open System.Collections.Generic 
let results = new Dictionary<string,int>() 

results.Add("George", 10) 
results.Add("Peter", 5) 
results.Add("Jimmy", 9) 
results.Add("John", 2) 

results 
|> Seq.sortBy (fun (KeyValue(k,v)) -> k) 
|> Seq.iter (fun (KeyValue(k,v)) -> printfn "%s: %d" k v) 
+0

Ну правильно KeyValue! Спасибо Брайан! – 2009-07-13 00:40:07

+0

Я получаю * Тип 'IDictionary' несовместим с типом' seq <'a> '* из' Environment.GetEnvironmentVariables() |> Seq.map (fun (KeyValue (k, v)) -> k.Contains («COMNTOOLS»)) ' – Maslow

+0

Seq.map нуждается в IEnumerable , но IDictionary - только IEnumerable. Plus DictionaryEntry имеет ключ и значение как объект. Я должен был сделать это уродство, чтобы отсортировать переменные среды: «Environment.GetEnvironmentVariables() |> Seq.cast |> Seq.map (fun dictEnt -> (dictEnt.Key:?> String, dictEnt.Value: ?> string)) |> Seq.sortBy (fun (k, v) -> k) ' –

13

Вы также можете найти функцию dict. Пусть F # сделать некоторый тип вывода для вас:

let results = dict ["George", 10; "Peter", 5; "Jimmy", 9; "John", 2] 

> val results : System.Collections.Generic.IDictionary<string,int> 

 Смежные вопросы

  • Нет связанных вопросов^_^