Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can LINQ be used to find gaps in a sorted list?

Is it possible for me to use LINQ in a way that allows me to determine that "9" is the first missing value in the sorted list without using a for-loop and comparing each value to the one adjacent to it?

var listStringVals = new [] { "7", "13", "8", "12", "10", "11", "14" }; // sort list to "7","8","10","11","12","13","14" var sortedList = listStringVals.OrderBy(c => int.Parse(c)).ToList(); // need some magic here to get the first gap in the sorted list 
like image 205
Nate Avatar asked Nov 24 '10 18:11

Nate


1 Answers

Let

var strings = new string[] { "7", "13", "8", "12", "10", "11", "14" }; 

Then

var list = Array.ConvertAll(strings, s => Int32.Parse(s)).OrderBy(i => i); // or var list = strings.Select(s => int.Parse(s)).OrderBy(i => i); // or var list = strings.OrderBy(s => int.Parse(s)); 

(note this question)

and then

var result = Enumerable.Range(list.Min(), list.Count).Except(list).First(); // 9 // or int min = list.Min(), max = list.Max(); var result = Enumerable.Range(min, max - min + 1).Except(list).First(); 
like image 150
abatishchev Avatar answered Oct 13 '22 07:10

abatishchev