我正在编写一个程序,其中有一个卡片组(MyDeck 对象),其中包含一个列表(卡片类型列表),其中包含我的卡片(卡片对象)。 还有一个杂志(Magazine Object),里面有一张卡片列表(List of type string)待售。我想将杂志中的卡片添加到我的套牌中 除非我还没有卡。困难的部分是我的卡片是对象,而杂志中的卡片是字符串,所以我必须调用 mycard.getCardName() 为了得到我的卡片的名称和杂志中的卡片,我可以简单地在列表中运行,因为它们只是一个字符串列表。
这是我的代码,问题是只有杂志中的前 2 张牌被添加到我的套牌中。
也许我处理问题的方式不对。
public static class MyDeck
{
public static List<Card> Cards = new List<Card>();
//Other Members
}
public class Card
{
//associated memebers
}
public class Magazine
{
public List<string> MagCards = new List<string>();
//Other Members
}
private void AddCardsToMyDeck(List<string> MagCards)
{
//If I have no cards in my deck then add the first one on the magazine to my deck
if(MyDeck.MyCards.Count == 0)
{
Card c = new Card(MagCards[0]);
MyDeck.MyCards.Add(c);
}
//for each name of each card in the magazine
foreach(string MagCard in MagCards)
{
//for each card in my deck
foreach (Card crd in MyDeck.MyCards)
{
//if the my card is in the magazine then don't add it, else add it
if (MagCards.Contains(crd.getCardName()))
{
break;
}
else
{
Card cd = new Card(MagCard);
MyDeck.MyCards.Add(cd);
}
}
}
}
// NOTE: MyDeck.Cards is empty
Magazine.MagCards.Add("B. Ruth");
Magazine.MagCards.Add("M. Piazza");
Magazine.MagCards.Add("J. Robinson");
AddCardsToMyDeck(Magazine.MagCards);
//Only Ruth and Piazza are added
最佳答案
// get card names in your deck
var deckCardNames = MyDeck.Cards.Select( c => c.getCardName() );
// get card names in magazine cards that are not in your deck
var missingMagCardNames = MagCards.Except( deckCardNames );
// instantiate card objects for each missing card name
var missingCards = missingMagCardNames.Select(mc => new Card(mc));
// add missing cards to your deck
MyDeck.Cards.AddRange( missingCards );
// whole thing inline
MyDeck.Cards.AddRange( MagCards.Except( MyDeck.Cards.Select( c => c.getCardName() ) ).Select (mc => new Card(mc) ) );
关于C#:使用 Obj.getName() 将 List<string> 中的字符串与单独 List<Object> 中对象中的字符串属性进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19164870/