Solved

need to search a multidimensional array in c#

Posted on 2004-10-15
5
506 Views
Last Modified: 2012-06-21
HI,

I'm having a hard time figuring out how to use a multidemensional array. Basically a deck of cards.
Here is the Deck:
--------------------------------------
int[,] cards = new int[52,2]
            {
                  //11 = jack
                  //12 = queen
                  //13 = king
                  //14 = Ace

                  //1 = clubs
                  //2 = diamonds
                  //3 = hearts
                  //4 = spades

                  {2,1},{2,2},{2,3},{2,4},
                  {3,1},{3,2},{3,3},{3,4},
                  {4,1},{4,2},{4,3},{4,4},
                  {5,1},{5,2},{5,3},{5,4},
                  {6,1},{6,2},{6,3},{6,4},
                  {7,1},{7,2},{7,3},{7,4},
                  {8,1},{8,2},{8,3},{8,4},
                  {9,1},{9,2},{9,3},{9,4},
                  {10,1},{10,2},{10,3},{10,4},
                  {11,1},{11,2},{11,3},{11,4},
                  {12,1},{12,2},{12,3},{12,4},
                  {13,1},{13,2},{13,3},{13,4},
                  {14,1},{14,2},{14,3},{14,4},
            };
------------------
Am I using the right array, or should I use a jagged array?
I'm having a hard time searching the array.
For example, how would I search for all the objects with 4 as the first number in the array?
{4,1}, {4,2}, {4,3}, {4,4}?
0
Comment
Question by:unomateo
  • 2
5 Comments
 
LVL 1

Expert Comment

by:RogueAce
ID: 12325168
With a simple unsorted array, the only reliable way to search it is sequentially. For example:

for(uint c=0,c<52,c++){
if(cards[c,0]==4){
//Put code here to deal with 4s
}
}

The [] operator indexes into the array. Keeping in mind that the array is 0-based, cards[3,0] will be 2 and cards[3,1] will be 4, because the 3rd row of the cards array is {2,4}.

If you want more efficient searching you could sort using some strategy and do a binary search on the array.

Hope this helps.
0
 

Author Comment

by:unomateo
ID: 12325441
Thanks

I think I am really confused about how to do this.
When I list the full array, I have 104 items. I think I need 52 items.
I though that each item in the array would be in this format: (2, 1)(2, 2), but actually the array lists like this: 2, 1, 2, 2...

What I need to do is make a deck of cards, that does not need to be shuffled. I want to pull a card out, for example 2 of clubs...then count to see how many more 2's are left, and how many more clubs are left. The code you gave me works, but I think my array is wrong to start off with?
Should I use a single-dimension array, and just parse it using the binary search you mentioned earlier?
0
 
LVL 1

Accepted Solution

by:
RogueAce earned 250 total points
ID: 12325613
Here's how I would do it if I were you:

//this is outside your function in your class
enum cardSuit {Clubs, Hearts, Diamonds, Spades};

struct Card {
  cardSuit Suit;
  uint Value;}

//this is in your function
Card[] cards = new Card[52];

c=0;
Card aCard=new Card;
for(cardSuit s=Clubs;s<=Spades;s++){
  for(uint v=2;v<=14;v++){
    aCard.Suit=s;
    aCard.Value=v;
    cards[c]=cCard;}}

Let's say using this approach you want to find all the 4s. Adapting the code I gave you earlier:
for(uint c=0,c<52,c++){
  if(cards[c].Value==4){
    //Put code here to deal with 4s
  }
}

If you don't understand structs and enums, this can be confusing, but I think it will ultimately work the best for you.

Good luck!
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Suggested Solutions

Extention Methods in C# 3.0 by Ivo Stoykov C# 3.0 offers extension methods. They allow extending existing classes without changing the class's source code or relying on inheritance. These are static methods invoked as instance method. This…
Performance in games development is paramount: every microsecond counts to be able to do everything in less than 33ms (aiming at 16ms). C# foreach statement is one of the worst performance killers, and here I explain why.
It is a freely distributed piece of software for such tasks as photo retouching, image composition and image authoring. It works on many operating systems, in many languages.
In this tutorial you'll learn about bandwidth monitoring with flows and packet sniffing with our network monitoring solution PRTG Network Monitor (https://www.paessler.com/prtg). If you're interested in additional methods for monitoring bandwidt…

708 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now