|
Use Linq:
using System.Linq;
List<List<int>> output = lstInput
.Select((n,ix)=>new {n, ix})
.GroupBy(p=>p.ix / 3, p=>p.n)
.Select(g=>g.ToList())
.ToList();
Never mind, I didn't read the post completely, sorry.
modified 26-May-16 1:59am.
|
|
|
|
|
OK here is my improved solution, using Linq:
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static void Main()
{
List<int> lstInput = new List<int>(){1,2,3,4,5,6,7,9,10,11,22};
var aggResult = lstInput
.Aggregate(new
{
last = lstInput.First()-1,
result = new List<List<int>>(),
current = new List<int>()
},
(agg, n)=>
{
List<int> current = agg.current;
if(n != agg.last + 1)
{
agg.result.Add(current);
current = new List<int>();
}
current.Add(n);
return new {last = n, result = agg.result, current};
});
if(aggResult.current.Count > 0)
{
aggResult.result.Add(aggResult.current);
}
Console.Out.WriteLine(
"{{{0}}}",
string.Join(
"},{",
aggResult.result.Select(o=>string.Join(",", o.Select(e=>e.ToString())))
)
);
}
}
Not sure it's any more elegant, though...
|
|
|
|
|
Staffan Bruun wrote: Not sure it's any more elegant, though Comparing this dogs breakfast to kenneths I know which one I would want to support. I use Linq quite a bit but only for the simplest things. Once you get into aggregates I start looking for other options.
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
Yeah, it kind of blew up in my face as I wrote it.
The problem with coding is that it is hard to pick the simple, correct and maintainable solution when it just seems so... ordinary sometimes, compared to a conceptually elegant solution where the true devil hides in the details.
|
|
|
|
|
Perhaps come old fashioned coding like this:
private List<List<int>> GetList(List<int> Input)
{
List<List<int>> Result = new List<List<int>>();
List<int> CurrentList = new List<int>();
CurrentList.Add(Input[0]);
for (int i = 1; i < Input.Count; i++)
{
if (Input[i] == (Input[i - 1] + 1))
CurrentList.Add(Input[i]);
else
{
Result.Add(CurrentList);
CurrentList = new List<int>();
CurrentList.Add(Input[i]);
}
}
if (CurrentList.Count != 0)
Result.Add(CurrentList);
return Result;
}
|
|
|
|
|
You could also use the GetRange function on the list to do the actual work of making the sub lists, and then you don't need to keep track of so many things.
List<List<int>> GetSubLists(List<int> lstInput)
{
List<List<int>> lstSubLists = new List<List<int>>();
if (lstInput.Count == 0)
return lstSubLists;
int subListStartIndex = 0;
for (int i = 1; i < lstInput.Count; ++i)
{
if (lstInput[i] - lstInput[i-1] != 1)
{
lstSubLists.Add(lstInput.GetRange(subListStartIndex, i - subListStartIndex));
subListStartIndex = i;
}
}
lstSubLists.Add(lstInput.GetRange(subListStartIndex, lstInput.Count - subListStartIndex));
return lstSubLists;
}
|
|
|
|
|
Now that is simple and beautiful
Zen and the art of software maintenance : rm -rf *
Maths is like love : a simple idea but it can get complicated.
|
|
|
|
|
technical ? => QA forum
«There is a spectrum, from "clearly desirable behaviour," to "possibly dodgy behavior that still makes some sense," to "clearly undesirable behavior." We try to make the latter into warnings or, better, errors. But stuff that is in the middle category you don’t want to restrict unless there is a clear way to work around it.» Eric Lippert, May 14, 2008
|
|
|
|
|
That is why I provided my solution so it does not look like I am asking for "give me code"
Zen and the art of software maintenance : rm -rf *
Maths is like love : a simple idea but it can get complicated.
|
|
|
|
|
No footprints. Nothing modified from the previous post, just removed the optional extra solutions.
typedef std::map<int*, int>::iterator it_type;
int arrNum[] = { 1, 2, 6, 4, 5, 7, 8, 9, 2, 2, NULL };
int* pBegin = (int*)&arrNum[0];
int* pStart = pBegin; int* pNext = pBegin +1;
std::map<int*, int> _mapSeg;int nCounter = 0;
_mapSeg[pBegin] = nCounter;
while (NULL != *pBegin)
{ _mapSeg[pStart] = nCounter++;
if (*pBegin + 1 != *pNext && (*pBegin != *pNext))
{ nCounter = 0;pStart = pNext;}
++pBegin;++pNext;
}
Starting to think people post kid pics in their profiles because that was the last time they were cute - Jeremy.
modified 27-May-16 2:53am.
|
|
|
|
|
Then there is the Manager solution:
Ted,
I need a function that splits a list of integers into sublists, so that each sublist only contains runs of consecutive digits.
I know you're busy with all the extra items this week, but if you could get that for me today, that would be great.
TIA,
Mike
|
|
|
|
|
The "lean and green" solution asks "Why perform all those allocations, copies, and inserts? Just return an array of the substrings' lengths":
int
MapSubarrays
(
int Len
,
int* Arr
,
int* Map
)
{
int result = 0 ;
int i ;
Map [ 0 ] = 1 ;
for ( i = 1 ; i < Len ; i++ )
{
Map [ i ] = 0 ;
if ( Arr [ i ] - Arr [ i - 1 ] != 1 )
{
result++ ;
}
Map [ result ]++ ;
}
return ( result ) ;
}
Then let the caller do what it wants with the result.
3 : { 1 , 2 , 3 }
3 : { 5 , 6 , 7 }
1 : { 22 }
modified 26-May-16 23:37pm.
|
|
|
|
|
Incredibly powerful CRM. It's amazing how you can create complex objects with table joins, lookups, etc., play around with the UI, etc., and their servers are FAST.
That said, it took me six hours to figure out how to import a CSV, figure out that if you mark a field as currency, it still won't parse $ and , and that you want to map your CSV header columns exactly to object fields because otherwise you have to manually map them, and because you'll be trying the import, like 50 times before you get it right, it's a big time saver not to have to manually map them every time!
Whew. And all this pro bono for a non-profit that asked me to help them out.
Marc
|
|
|
|
|
Sorry, but if a non-profit organisation can afford salesforce, then they can afford to pay you to fix it for them.
When a sweet smile means "I can pay the big guys, but you can go f*** yourself", modify it with a bunch of fives.
I wanna be a eunuchs developer! Pass me a bread knife!
|
|
|
|
|
They're using the free non-profit starter pack that SF offers.
Marc
|
|
|
|
|
The old adage applies, no good deed goes unpunished...
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
Marc Clifton wrote: all this pro bono for a non-profit that asked me to help them out.
Ah, but think the of the warm fuzzy feelings you will have from helping out. Seriously though, it shows good form IMHO, helping others out, when needed.
|
|
|
|
|
Hi All,
I am trying to run YouTube on my Android phone once I minimize, then it stops running, what I did was couple of apps I downloaded to run them in the background. But unfortunately they are all running but not picking up the next video how youtuble on IE or Chrome picks it.
I want both the next video should be picked up and should be running in the background and for free. Is there any idea please?
Thanks,
Abdul Aleem
"There is already enough hatred in the world lets spread love, compassion and affection."
|
|
|
|
|
Bash.
I wanna be a eunuchs developer! Pass me a bread knife!
|
|
|
|
|
Though not sure this is the right place to ask such Qn, You can use YouTube Red by Google inc.
|
|
|
|
|
Sumuj John wrote: Though not sure this is the right place to ask such I don't see why. I thought it was a very appropriate question.
There are only 10 types of people in the world, those who understand binary and those who don't.
|
|
|
|
|
Hey,
I am here at Edison New jersey for next couple of weeks any codeproject guy is there so we can catch up and have some fun.
Thanks
Suvabrata
Life is all about share and care...
public class Life : ICareable,IShareable
{
// implements yours...
}
|
|
|
|
|
Suvabrata Roy wrote: we can catch up and have some fun.
Everything about this, is just wrong...on so many levels.
|
|
|
|
|
This is Wong on so many levels.[^]
What do you get when you cross a joke with a rhetorical question?
The metaphorical solid rear-end expulsions have impacted the metaphorical motorized bladed rotating air movement mechanism.
Do questions with multiple question marks annoy you???
|
|
|
|
|