Время от времени вам нужно создать индекс для вашего списка, чтобы выполнить некоторые вычисления или просто распечатать элементы с числовой информацией о порядке.
Практически в каждом языке стандартным способом является использование отдельной переменной, которая в данном случае является нашим счетчиком. Как здесь, для C#:
List<string> listToIterate = new List<string>() { "one", "two", "three", "four", "five" }; int i = 1; foreach (string item in listToIterate) { System.Console.WriteLine($"A list index: {i}, a list element: {item}"); i += 1; }
И F# здесь:
let listToIterate = [ "one"; "two"; "three"; "four"; "five" ] let mutable i = 0 for item in listToIterate do printfn $"A list index: {i}, a list element: {item}" i <- i + 1
Вывод кода C# и F#:
В обоих случаях есть простой способ сделать код короче и лаконичнее.
Для C# мы можем использовать LINQ:
List<string> listToIterate = new List<string>() { "one", "two", "three", "four", "five" }; foreach (var item in listToIterate.Select((listEmlement, i) => (listEmlement, i))) { Console.WriteLine($"A list index: {item.i}, a list element: {item.listEmlement}"); }
В F# мы используем конвейер, который индексирует список на первом этапе, затем перебирает новый список и печатает каждый элемент.
let listToIterate = [ "one"; "two"; "three"; "four"; "five" ] listToIterate |> List.indexed |> List.iter (fun (i, item) -> printfn "A list index: %d, a list element: %s" i item)