gpt4 book ai didi

c# - 需要帮助了解 List.Sort(IComparer(T)) 如何知道要排序的值

转载 作者:行者123 更新时间:2023-11-30 14:42:06 25 4
gpt4 key购买 nike

我正在开发一个创建对象 (Card) 的程序(学习 C#),并在该程序中按值对一副纸牌进行排序。我感到困惑的是,当对象的实例不是传递给方法的参数而是类对象时,它如何能够根据纸牌的值(value)对一副纸牌进行排序。下面是帮助回答我的问题的代码——如果我传递实例化的对象,我会完全遵循这个。

创建对象的类:

class Card
{
public Suits Suit { get; set; }
public Values Value { get; set; }

public Card(Suits suit, Values value)
{
this.Suit = suit;
this.Value = value;
}

public string Name
{
get { return Value.ToString() + " of " + Suit.ToString(); }
}

public override string ToString()
{
return Name;
}
}

在另一个类中,我正在调用实例化从接口(interface) IComparer 继承的对象 (CardComparer_byValue) 的方法。这就是我的困惑所在。

public void SortByValue() {
cards.Sort(new CardComparer_byValue());
}

和 SortByValue 类

class CardComparer_byValue : IComparer<Card>
{
public int Compare(Card x, Card y)
{
if (x.Value > y.Value)
return 1;
if (x.Value < y.Value)
return -1;
if (x.Suit > y.Suit)
return 1;
if (x.Suit < y.Suit)
return -1;
return 0;
}

}

我会认为上面的方法“SortByValue”是这样调用的

Card mycard = new Card("Spades", 4);
public void SortByValue() {
cards.Sort(new CardComparer_byValue(mycard));
}

那么有人可以向我解释一下我在这种排序方式中遗漏了什么吗?

最佳答案

它正在对整个集合进行排序,而不是针对特定的“卡片”。

这就是为什么 Compare 方法定义如下:

public int Compare(Card x, Card y)

它使用“Card x”和“Card y”,在 cards 集合中的成对元素上调用它,以便对其进行排序。 Sort 方法多次调用此Compare 方法,使用它通过一次一对地比较元素来对整个集合进行排序。

关于c# - 需要帮助了解 List<T>.Sort(IComparer(T)) 如何知道要排序的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3357098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com