2015-09-13 37 views
1

我想找到一个更有效的方式来读取数组中的值,并将其转换为更有意义的东西,如'C'存储在数组中我希望它能作为“俱乐部”返回,下面是我目前为止的内容,效率非常低。更有效的方式来读取数组中的值转换

public static void DisplayHandData(Card[] data) 
    { 
     Console.WriteLine(); 
     //test values loaded into array in correct positions 
     Console.WriteLine("** Values in array **"); 
     //read values out to check against if statements 
     for (int records = 0; records < data.Length; records++) 
     { 
      Console.WriteLine(data[records].suit); 
      Console.WriteLine(data[records].value); 
     } 
     DrawBlankLine(); 
     DrawLine(); 
     DrawBlankLine(); 
     Console.WriteLine("** Values in suit **"); 

     if (data[0].suit == 'C') 
     { 
      string suit = "Clubs"; 
      Console.WriteLine("Card 1: {0} of {1}", data[0].value, suit); 
     } 
     else if (data[0].suit == 'D') 
     { 
      string suit = "Diamonds"; 
      Console.WriteLine("Card 1: {0} of {1}", data[0].value, suit); 
     } 
     else if (data[0].suit == 'H') 
     { 
      string suit = "Hearts"; 
      Console.WriteLine("Card 1: {0} of {1}", data[0].value, suit); 
     } 
     else if (data[0].suit == 'S') 
     { 
      string suit = "Spades"; 
      Console.WriteLine("Card 1: {0} of {1}", data[0].value, suit); 
     } 
     else 

我还需要做数据[0]。价值相同王牌被存储为值14,国王13等。

任何帮助,将不胜感激。

回答

2

你可以使用词典:在你的类/结构

string suitName = suitDictionary[data[0].suit]; 
+0

这将如何工作的价值像Ace,国王等结构下的.value? – Coop1979

+0

您不会显示'Card'类,所以我不知道'value'的类型,但是您可以创建一个单独的字典来保存卡片的值。 – CodeCaster

+0

结构是'公共结构卡 { 公共焦炭西装; //“C'-俱乐部,‘D'钻石’H'-心 //和” S'-黑桃 公共int值; // 2-14 - 为2-10,杰克,女王,国王,王牌 } – Coop1979

-1

覆盖ToString()

private static Dictionary<char, string> suitDictionary = new Dictionary<char, string> 
{ 
    { 'C', "Clubs" }, 
    { 'H', "Hearts" }, 
    // ... 
} 

然后,您可以通过访问西服的关键获取名称

struct Card 
{ 
    // ... some code 


    public override string ToString() 
    { 
     string s = ""; 
     switch(this.suit) 
     { 
      case 'c' : s= "Clubs"; break; 
      case 'd' : s= "Diamons"; break; 
      case 'h' : s= "Hearts"; break; 
      case 's' : s= "Spades"; break; 
     } 

     return String.Format("{0} of {1}", this.value, s); 
    } 
} 

然后你可以这样做:

Console.WriteLine("Card 1: " + data[0]); 
+2

这就是[不是你应该重写'.ToString()'为](http://stackoverflow.com/questions/10278049/why-when-would-it-be-appropriate-to-override-tostring)。 – CodeCaster

+0

尝试了上述,这不会工作,因为我正在使用结构中的值来评估其他项目,这将意味着重写整个9个方法我有...你有任何其他的建议? – Coop1979

+0

@ Coop1979好吧,展示你的整个结构或至少它的代码的相关部分,我们将看到 – Fabjan

相关问题