-
October 10th, 2011, 12:17 AM
#1
[RESOLVED] C# - LINQ Lowest Two Values
I'm currently using a List<> with a class that contains a value Weight. As an example:
Code:
public class Nodes
{
public Nodes()
{
// some stuff
}
private double m_weight;
public double Weight
{
get { return this.m_distance; }
set { m_distance = value; }
}
}
In my Main class, I'm simply doing a
Code:
List<Nodes> Population = new List<Nodes>();
// some stuff
Nodes LowestWeight = new Nodes();
Nodes SecondLowestWeight = new Nodes();
Nodes HighestWeight = new Nodes();
// some more stuff
At this point how would I use LINQ to get the lowest, second lowest, and highest "Nodes" in Population? I read about doing something, such as
Code:
LowestWeight = Population.Min();
HighestWeight = Population.Max();
but how can I get the Second Lowest? or is that syntax even correct? Any help is appreciated.
-
October 10th, 2011, 05:40 AM
#2
Re: C# - LINQ Lowest Two Values
I think you could use the OrderBy method
It's not a bug, it's a feature!
-
October 10th, 2011, 02:18 PM
#3
Re: C# - LINQ Lowest Two Values
Convert to a List<T> and call sort. It's probably the most efficient way.
www.monotorrent.com For all your .NET bittorrent needs
NOTE: My code snippets are just snippets. They demonstrate an idea which can be adapted by you to solve your problem. They are not 100% complete and fully functional solutions equipped with error handling.
-
October 10th, 2011, 06:33 PM
#4
Re: C# - LINQ Lowest Two Values
A more complicated LINQ query would be more suited to select a specific subset of data based on some predicate, but for this, it's better to keep it simple, as suggested above.
Alternatively you could do something like this:
Code:
Nodes max = Population.Max();
Nodes min = Population.Min();
Population.Remove(min);
Nodes nextToMin = Population.Min();
This way you can avoid sorting, and if you need to perserve the original structure of the list, you can put the min back in. Wow, it rimes!
Aside from that, it's a good idea to try and make your code comply with widespread C# naming conventions - local variables such as Population should use camelCasing, so I would rename that to population instead.
These conventions help both you and us (or any potential team members in a team project) understand the code more quickly. Besides, if you give this application a rest, and then come back some time, you'll be quicker to pick up where you left of if your naming conventions are consistent throughout your work.
-
October 10th, 2011, 10:36 PM
#5
Re: C# - LINQ Lowest Two Values
I normally use camelCase, I often just write sample code segments, in my forum posts. However, Thanks for the help with that quick snippet, didn't even think about that. LINQ is seeming to be quite helpful. Just started learning it this week.
Last edited by QuinnJohns; October 10th, 2011 at 10:58 PM.
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|