Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Introduction to C# list comprehensions [closed]

Tags:

c#

linq

How can I perform list comprehensions in C#?

like image 559
William Hutchen Avatar asked Sep 25 '08 01:09

William Hutchen


People also ask

What is C language introduction?

What is C? C is a general-purpose programming language created by Dennis Ritchie at the Bell Laboratories in 1972. It is a very popular language, despite being old. C is strongly associated with UNIX, as it was developed to write the UNIX operating system.

What is C language in simple words?

What Does C Programming Language (C) Mean? C is a high-level and general-purpose programming language that is ideal for developing firmware or portable applications. Originally intended for writing system software, C was developed at Bell Labs by Dennis Ritchie for the Unix Operating System in the early 1970s.

What is C and its features?

C is a statically typed programming language, which gives it an edge over other dynamic languages. Also, unlike Java and Python, which are interpreter-based, C is a compiler-based program. This makes the compilation and execution of codes faster.

What is C language used for?

C programming language is a machine-independent programming language that is mainly used to create many types of applications and operating systems such as Windows, and other complicated programs such as the Oracle database, Git, Python interpreter, and games and is considered a programming foundation in the process of ...


2 Answers

A List Comprehension is a type of set notation in which the programmer can describe the properties that the members of a set must meet. It is usually used to create a set based on other, already existing, set or sets by applying some type of combination, transform or reduction function to the existing set(s).

Consider the following problem: You have a sequence of 10 numbers from 0 to 9 and you need to extract all the even numbers from that sequence. In a language such a C# version 1.1, you were pretty much confined to the following code to solve this problem:

ArrayList evens = new ArrayList(); ArrayList numbers = Range(10); int size = numbers.Count; int i = 0;  while (i < size)  {     if (i % 2 == 0)      {         evens.Add(i);     }     i++; } 

The code above does not show the implementation of the Range function, which is available in the full code listing below. With the advent of C# 3.0 and the .NET Framework 3.5, a List Comprehension notation based on Linq is now available to C# programmers. The above C# 1.1 code can be ported to C# 3.0 like so:

IEnumerable<int> numbers = Enumerable.Range(0, 10); var evens = from num in numbers where num % 2 == 0 select num; 

And technically speaking, the C# 3.0 code above could be written as a one-liner by moving the call to Enumarable.Range to the Linq expression that generates the evens sequence. In the C# List Comprehension I am reducing the set numbers by applying a function (the modulo 2) to that sequence. This produces the evens sequence in a much more concise manner and avoid the use of loop syntax. Now, you may ask yourself: Is this purely syntax sugar? I don't know, but I will definitelly investigate, and maybe even ask the question myself here. I suspect that this is not just syntax sugar and that there are some true optimizations that can be done by utilizing the underlying monads.

The full code listing is available here.

like image 190
λ Jonas Gorauskas Avatar answered Sep 21 '22 21:09

λ Jonas Gorauskas


Found this when I was looking up how to do list comprehensions in C#...

When someone says list comprehensions I immediately think about Python. The below code generates a list that looks like this:

[0,2,4,6,8,10,12,14,16,18] 

The Python way is like this:

list = [2*number for number in range(0,10)] 

In C#:

var list2 = from number in Enumerable.Range(0, 10) select 2*number; 

Both methods are lazily evaluated.

like image 21
Justin Bozonier Avatar answered Sep 19 '22 21:09

Justin Bozonier