📅  最后修改于: 2023-12-03 14:55:10.243000             🧑  作者: Mango
如果你曾经设计过卡牌游戏,那么你一定知道如何移除卡牌组合中的重复卡牌。在这篇文章中,我将向你展示如何用 C# 移除一组卡牌中的重复卡牌。
为了实现这个目标,我们可以使用 List<T>
类型来表示卡牌组合。然后,我们可以使用 Distinct
方法来移除列表中的重复卡牌。
以下是一个简单的示例:
List<string> cards = new List<string>() { "card1", "card2", "card2", "card3", "card3", "card3" };
List<string> uniqueCards = cards.Distinct().ToList();
foreach (string card in uniqueCards)
{
Console.WriteLine(card);
}
在这个示例中,我们首先创建了一个包含重复卡牌的 List<string>
。然后,我们使用 Distinct
方法来移除所有重复卡牌,并将结果存储在 uniqueCards
变量中。
最后,我们遍历 uniqueCards
列表,打印每张卡牌的名称。
如果你的卡牌具有更复杂的结构(例如,它们具有属性、效果等),那么你可能需要使用自定义类型。在这种情况下,你需要实现 IEquatable<T>
接口来指定卡牌如何进行比较。
以下是一个示例:
public class Card : IEquatable<Card>
{
public string Name { get; set; }
public int Attack { get; set; }
public int Defense { get; set; }
public Card(string name, int attack, int defense)
{
Name = name;
Attack = attack;
Defense = defense;
}
public bool Equals(Card other)
{
return Name == other.Name && Attack == other.Attack && Defense == other.Defense;
}
public override int GetHashCode()
{
return (Name + Attack + Defense).GetHashCode();
}
}
List<Card> cards = new List<Card>()
{
new Card("card1", 1, 2),
new Card("card2", 3, 4),
new Card("card2", 3, 4),
new Card("card3", 5, 6),
new Card("card3", 5, 6),
new Card("card3", 5, 6)
};
List<Card> uniqueCards = cards.Distinct().ToList();
foreach (Card card in uniqueCards)
{
Console.WriteLine(card.Name + " " + card.Attack + " " + card.Defense);
}
在这个示例中,我们创建了一个 Card
类型,并实现了 IEquatable<Card>
接口来指定如何比较两张卡牌。
然后,我们创建了一个包含重复卡牌的 List<Card>
。使用 Distinct
方法来移除所有重复卡牌,并将结果存储在 uniqueCards
变量中。
最后,我们遍历 uniqueCards
列表,打印每张卡牌的名称、攻击力和防御力。
在这篇文章中,我向你展示了如何使用 C# 移除一组卡牌中的重复卡牌。无论你的卡牌具有多复杂的结构,你都可以使用 List<T>
和 Distinct
方法轻松地实现这个目标。