C# 泛型BubbleSort扩展 publicstatict[]BubbleSort(此T[]arr),其中T:class { 对于(int i=0;i”不能应用于“T”和“T”类型的操作数
如何创建通用冒泡排序扩展方法?这里有没有办法处理比较的问题?C# 泛型BubbleSort扩展 publicstatict[]BubbleSort(此T[]arr),其中T:class { 对于(int i=0;i”不能应用于“T”和“T”类型的操作数,c#,generics,C#,Generics,如何创建通用冒泡排序扩展方法?这里有没有办法处理比较的问题? 错误1运算符“>”不能应用于“T”和“T”类型的操作数您不能使用您不能使用您可以将T限制为i可比较,如下所示: public static T[] BubbleSort<T>(this T[] arr) where T : class { for (int i = 0; i < arr.Length; i++) { for (int j = 0;
错误1运算符“>”不能应用于“T”和“T”类型的操作数您不能使用
您不能使用您可以将T
限制为i可比较,如下所示:
public static T[] BubbleSort<T>(this T[] arr) where T : class
{
for (int i = 0; i < arr.Length; i++)
{
for (int j = 0; j < arr.Length-1; j++)
{
if (arr[j - 1] > arr[j])
swap(arr[j - 1], arr[j]);
}
}
}
publicstaticvoidbubblesort(此T[]arr),其中T:IComparable
{
对于(int i=0;i0
掉期(arr[j],arr[j+1]);
}
}
}
它的优点是T也可以是像int
这样的值类型。此外,当函数更改此
数组时,不需要返回数组。您可以将T
限制为i可比较
,如下所示:
public static T[] BubbleSort<T>(this T[] arr) where T : class
{
for (int i = 0; i < arr.Length; i++)
{
for (int j = 0; j < arr.Length-1; j++)
{
if (arr[j - 1] > arr[j])
swap(arr[j - 1], arr[j]);
}
}
}
publicstaticvoidbubblesort(此T[]arr),其中T:IComparable
{
对于(int i=0;i0
掉期(arr[j],arr[j+1]);
}
}
}
它的优点是T也可以是像int
这样的值类型。此外,当函数更改此数组时,不需要返回数组。可以通过以下几种方法执行此操作:
要求T实现IComparable
,并使用CompareTo
方法进行比较
添加第二个类型为IComparer
的参数,该参数实现自定义比较。然后,您将使用此比较器对象进行键比较
您可以通过以下几种方式来实现此目的:
要求T实现IComparable
,并使用CompareTo
方法进行比较
添加第二个类型为IComparer
的参数,该参数实现自定义比较。然后,您将使用此比较器对象进行键比较
你在问什么?看起来您确实创建了一个扩展方法。也许您只是想确保T
实现了i可比较性
?它不起作用。错误1运算符“>”不能应用于“T”和“T”类型的操作数。我认为OP需要一个比较类的实现,而不是x>y
,但它不清楚。更重要的是,为什么要使用bubblesort?这基本上是最糟糕的。@John:也许只是一些编程练习。从实现各种排序算法开始并不少见。你在问什么?看起来您确实创建了一个扩展方法。也许您只是想确保T
实现了i可比较性
?它不起作用。错误1运算符“>”不能应用于“T”和“T”类型的操作数。我认为OP需要一个比较类的实现,而不是x>y
,但它不清楚。更重要的是,为什么要使用bubblesort?这基本上是最糟糕的。@John:也许只是一些编程练习。从实现各种排序算法开始并不少见。