2016-12-12 24 views
0

想知道如果我可以在这里获得一些帮助。我有一些创建2对数字的代码。我将它们与.except进行比较。我有的问题是,而不是像我的代码中显示的数字分配如何添加50对随机抛出对比较。将随机数添加到配对列表中进行比较

public FrmDieRoller() 
    { 
     InitializeComponent(); 
    } 

    public class Pair 
    { 
     public int FirstDie { get; set; } 
     public int SecondDie { get; set; } 
    } 

    public class Pair2 
    { 
     public int ThirdDie { get; set; } 
     public int FourthDie { get; set; } 

    } 

    public static List<Pair> ConvertToPairs(int[,] dieValues) 
    { 
     var query = from int item in dieValues select item; 
     var p1Rolls = query.ToList(); 
     List<Pair> pairs = new List<Pair>(p1Rolls.Count); 
     for (int i = 0; i <4 ; i += 2) 
     { 
      pairs.Add(new Pair() {FirstDie = p1Rolls[i], SecondDie = 
      p1Rolls[i+ 1]}); 
     } 
     return pairs; 
    } 

    public static List<Pair2> ConvertToPairs2(int[,] dieValues1) 
    { 
     var query = from int item1 in dieValues1 select item1; 
     var p2Rolls = query.ToList(); 
     List<Pair2> pairs1 = new List<Pair2>(p2Rolls.Count); 
     for (int j = 0; j < 4; j += 2) 
     { 
      pairs1.Add(new Pair2() {ThirdDie = p2Rolls[j], FourthDie = 
      p2Rolls[j + 1]}); 
     } 
     return pairs1; 
    } 

    public void btnRoll_Click(object sender, EventArgs e) 
    { 

     int[,] dieValue1 = {{1,2},{3,4}}; 
     int[,] dieValue2 = {{2,6},{5,1}}; 



     var p1Rolls = ConvertToPairs(dieValue1); 
     var p2Rolls = ConvertToPairs(dieValue2); 

     foreach (var item in p1Rolls.Except(p2Rolls)) 
     { 

     lstRollDifference.Items.Add(string.Format("Player one has [{0}, 

     {1}] which Player two does not", item.FirstDie, item.SecondDie)); 


     } 
+0

您的代码将无法正常工作。您不能在不覆盖'GetHashCode'和'Equals'的对象上调用'Except'。 – Enigmativity

+0

如果您尝试使用此代码 - “int [,] dieValue1 = {{1,2},{3,4}}; int [,] dieValue2 = {{2,6},{5,1},{3,4}};' - 你会看到你仍然被告知''''''玩家有一个[3,4]两个不“”。 – Enigmativity

+0

我很抱歉,我对c#仍然陌生,请您解释一下关于gethashcode的更多信息,除了 –

回答

0

这是我会怎么看待创建随机卷:

private Random _random = new Random(); 

private int RollDie() 
{ 
    return _random.Next(1, 7); // 7 is the exclusive max value - so real max is 6 
} 

private Pair RollPair() 
{ 
    return new Pair() 
    { 
     FirstDie = this.RollDie(), 
     SecondDie = this.RollDie() 
    }; 
} 

public void btnRoll_Click(object sender, EventArgs e) 
{ 
    List<Pair> p1Rolls = Enumerable.Range(0, 50).Select(n => this.RollPair()).ToList(); 
    List<Pair> p2Rolls = Enumerable.Range(0, 50).Select(n => this.RollPair()).ToList(); 

    foreach (var item in p1Rolls.Except(p2Rolls)) 
    { 
     lstRollDifference.Items.Add(string.Format("Player one has [{0}, {1}] which Player two does not", item.FirstDie, item.SecondDie)); 
    } 
} 
0

可以使用Random类生成卷,这将是最简单的合并代码在Pair类作为图:

class Pair : IEquatable<Pair> 
{ 
    public int FirstDie { get; set; } 
    public int SecondDie { get; set; } 

    public Pair(int d1, int d2) 
    { 
     FirstDie = d1; 
     SecondDie = d2; 
    } 

    public bool Equals(Pair other) 
    { 
     return this.FirstDie.Equals(other.FirstDie) 
      && this.SecondDie.Equals(other.SecondDie); 
    } 

    public override int GetHashCode() 
    { 
     return FirstDie.GetHashCode() 
       ^SecondDie.GetHashCode(); 
    } 

    private static Random r = new Random(); 
    public static Pair RollNewPair() 
    { 
     // The minimum value is inclusive, the maximum value is exclusive 
     return new Pair(r.Next(1, 7), r.Next(1, 7)); 
    } 
} 

(像Enigmativity表示,Except方法将无法正常没有实施IEquatable<Pair>和overridin工作摹GetHashCode

,然后用它像这样:

int numOfRolls = 20; 

List<Pair> playerOneRolls = Enumerable.Range(0, numOfRolls).Select(n => Pair.RollNewPair()).ToList(); 
List<Pair> playerTwoRolls = Enumerable.Range(0, numOfRolls).Select(n => Pair.RollNewPair()).ToList(); 

foreach (var roll in playerOneRolls.Except(playerTwoRolls)) 
{ 
    // do whatever 
} 
相关问题