System.Collections.Generic List и F # - PullRequest
       12

System.Collections.Generic List и F #

2 голосов
/ 06 ноября 2008

У меня есть класс C #, который возвращает список, используя System.Collections.Generic Lists not F # List

Я хочу перебрать список, чтобы найти объект или не найти его. Вот как я бы сделал это в C #. Как бы я сделал то же самое в F #

foreach (AperioCaseObj caseObj in CaseList)
{
     if (caseObj.CaseId == "")
     {    
     }
     else
     { 
     }
}

Ответы [ 5 ]

7 голосов
/ 06 ноября 2008
match Seq.tryfind ((=) "") caseList with
      None -> print_string "didn't find it"
    | Some s -> printfn "found it: %s" s
4 голосов
/ 07 ноября 2008

Список C # называется ResizeArray в F #. Чтобы найти элемент в ResizeArray, вы можете использовать «tryfind» или «find». TryFind возвращает тип опции (Option), что означает, что если элемент не найден, вы получите None. С другой стороны, поиск вызывает исключение, если он не находит искомый элемент


let foo() = 
   match CaseList |> ResizeArray.tryfind (fun x -> x.caseObj = "imlookingforyou") with
   |None -> print-string ""notfound
   |Some(case ) -> printfn "found %s" case 

или

let foo()
   try
      let case = ResizeArray.find (fun x -> x.caseObj = "imlookingforyou") 
      printfn "found %s" case 

   with
   | _ -> print_string "not found"

3 голосов
/ 06 ноября 2008

См. Этот пример для итерации целочисленного общего списка:

#light
open System.Collections.Generic

let genList = new List<int>()

genList.Add(1)
genList.Add(2)
genList.Add(3)


for x in genList do
  printf "%d" x
2 голосов
/ 06 ноября 2008

Этот список также является IEnumerable, так что вы все равно можете использовать запись F # for elt in list do:

for caseObj in CaseList do
  if caseObj.CaseId = "" then
    ...
  else
    ...
0 голосов
/ 06 ноября 2008

Использование tryfind для сопоставления с полем в записи:

type foo = {
    id : int;
    value : string;
}

let foos = [{id=1; value="one"}; {id=2; value="two"}; {id=3; value="three"} ]

// This will return Some foo
List.tryfind (fun f -> f.id = 2) foos

// This will return None
List.tryfind (fun f -> f.id = 4) foos
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...