Using float + Lambda Expressions C #

var distances = new Dictionary<char, float>();
var nodes = new List<char>();

I have this line to find the smallest distance

nodes.Sort((x, y) => distances[x] - distances[y]);

When I use int, it works well, but when I used float, I received a message

cannot convert lambda expression to type 'System.Collections.Generic.IComparer' because it is not a delegate type

Do you have an idea?

+4
source share
3 answers

First, your original program is bad programming practice when the values ​​are integers. It works for characters, but I would avoid this bad programming practice.

, , ; , int, x y, int, x y, , . . (, x y , x y, x - y .)

. :

  • . A == B B == C, A C. A < B B < C A C. .
  • . , A < B B > A, .

. - .

nodes.Sort((x, y) => x < y ? -1 : (x > y ? 1 : 0));

, NaN. NaN, , .

, . , , e , z, , z , é, , , , . ; , , ?

. ; :

http://ericlippert.com/2011/01/20/bad-comparisons-part-one/

+10

- Comparison<char> ( , ), float - Func<char, char, float> , Comparison<char> Func<char, char, int>.

- float.CompareTo:

nodes.Sort((x, y) => distances[x].CompareTo(distances[y]));

, , LINQ:

var sorted = nodes.OrderBy(x => distances[x]);
+8

Convert the lambda expression as follows.

nodes.Sort((x, y) =>
  {
    float Result = distances[x] - distances[y];
    if ( Result > 0.0f )
      return 1;
    else if ( Result < 0.0f )
      return -1;
    else
      return 0;
  });
0
source

All Articles