เมธอด Single.CompareTo() ใน C# ใช้เปรียบเทียบ instance นี้กับ object อื่น หรืออีก Single instance หนึ่ง คืนค่าจำนวนเต็มที่บ่งบอกว่าค่านี้ น้อยกว่า เท่ากับ หรือมากกว่าค่าที่เปรียบเทียบ
รูปแบบไวยากรณ์ (Syntax)
public int CompareTo(float value); public int CompareTo(object value);
- คืนค่า น้อยกว่า 0 : instance นี้ น้อยกว่า value
- คืนค่า 0 : instance นี้ เท่ากับ value
- คืนค่า มากกว่า 0 : instance นี้ มากกว่า value
ตัวอย่างที่ 1: เปรียบเทียบ float กับ float
using System;
public class Demo
{
public static void Main()
{
float f1 = 50.7f;
float f2 = 50.7f;
Console.WriteLine("Value1 = " + f1);
Console.WriteLine("Value2 = " + f2);
Console.WriteLine("Is f1 and f2 equal? = " + f1.CompareTo(f2)); // 0
}
}
ผลลัพธ์
Value1 = 50.7 Value2 = 50.7 Is f1 and f2 equal? = 0
ตัวอย่างที่ 2: เปรียบเทียบ float กับ object
using System;
public class Demo
{
public static void Main()
{
float f1 = 50.7f;
object f2 = 50.7f; // boxed float
Console.WriteLine("Value1 = " + f1);
Console.WriteLine("Value2 = " + f2);
int res = f1.CompareTo(f2);
if (res > 0)
Console.WriteLine("f1 > f2");
else if (res < 0)
Console.WriteLine("f1 < f2");
else
Console.WriteLine("f1 = f2");
}
}
ผลลัพธ์
Value1 = 50.7 Value2 = 50.7 f1 = f2
สรุปและข้อสังเกต
- Implement interface
IComparableและIComparable<Single> - Overload
CompareTo(float)มีประสิทธิภาพดีกว่าCompareTo(object)(หลีกเลี่ยง boxing) - NaN ถือว่า "น้อยกว่า" ค่าใดๆ รวมถึง NaN เอง (IEEE 754 standard)
- สำหรับการเปรียบเทียบ floating-point อย่างแม่นยำ ควรพิจารณา epsilon comparison แทน
- ใช้ใน sorting, searching, และ logic เงื่อนไขที่ต้องเปรียบเทียบค่า float
ตัวอย่างการใช้งานจริง: เรียงลำดับ float array
float[] values = { 3.14f, 1.41f, 2.71f, 0.57f };
Array.Sort(values, (a, b) => a.CompareTo(b));
// ผลลัพธ์: 0.57, 1.41, 2.71, 3.14