جافا كثافة [] [] مجموعة - بالتكرار وإيجاد قيمة

StackOverflow https://stackoverflow.com/questions/474451

  •  19-08-2019
  •  | 
  •  

سؤال

ولدي مجموعة في شكل 'int[][] "التي تمثل تنسق من شبكة صغيرة. تم تعيين كل تنسق القيمة الخاصة بها. على سبيل المثال array[0][4] = 28 ......

ولدي سؤالان. أولا، كيف يمكنني تكرار خلال كل القيم المخزنة. ثانيا، أريد أن أكون قادرة على إدخال قيمة ويكون لها تنسق محددة في الشبكة التي تم إرجاعها. ما يمكن أن يكون أفضل طريقة لمعالجة هذا؟

وشكرا على اي مساعدة!

هل كانت مفيدة؟

المحلول

ويمكنك تكرار إما لحلقات أو معززة لالحلقات:

for (int row=0; row < grid.length; row++)
{
    for (int col=0; col < grid[row].length; col++)
    {
        int value = grid[row][col];
        // Do stuff
    }
}

أو

// Note the different use of "row" as a variable name! This
// is the *whole* row, not the row *number*.
for (int[] row : grid)
{
    for (int value : row)
    {
         // Do stuff
    }
}

والنسخة الأولى ستكون أسهل حل ل"العثور على احداثيات" المسألة - مجرد التحقق مما إذا كانت القيمة في حلقة داخلية صحيحة

.

نصائح أخرى

وتكرار على القيمة تستخدم الحلقات:

 int[][] matrix   
 //...
 for(int row[] : matrix)
     for(int cell : row){
      //do something with cell
    }

وللوصول إلى الإحداثيات على أساس القيمة التي سوف تحتاج نوعا من hashmap مزدوج (نظرة في java.util.HashMap) ولكن أنا على بينة من أي شيء أن يفعل ذلك مباشرة

لتكرار عبر جميع العناصر في الشبكة جرب هذا:

int grid[][] = new int[10][10];

for(int i = 0; i < grid.length(); ++i) {
    for(int j = 0; j < grid[i].length(); ++j) {
        // Do whatever with grid[i][j] here
    }
}

وإذا لم يتم فرز الشبكة الخاصة بك بطريقة أو بأخرى فإنك على الأرجح لن تفعل أي أفضل من بحث شامل.

لبالتكرار، وأعتقد أنه سيكون شيئا مثل هذا (قد يكون جملة قبالة قليلا، وأنا لم تتعامل مع المصفوفات في جافا لفترة من الوقت.):

int[][] grid;  // just assuming this is already assigned somewhere

for(int x = 0 ; x < grid.length ; x++) {
  int[] row = grid[x];
  for(int y = 0 ; y < row.length ; y++) {
    int value = row[y];
    // Here you have the value for grid[x][y] and can do what you need to with it
  }
}

لبحث كنت ربما تحتاج إلى استخدام ذلك لتكرار، ثم العودة مرة واحدة كنت قد وجدت.

إذا هل يمكن أن تبحث عن وظيفة نفس القيمة عدة مرات فإنك قد ترغب في memoize النتائج باستخدام جدول هاش.

استخدم متداخلة لحلقات لتكرار عبر x و أبعاد ص، والتي تتيح تذهب أكثر من كل قيمة، واحدة في وقت واحد.

لإدخال قيمة، فقط تفعل الشيء نفسه على النحو الوارد أعلاه، ولكن ننظر لمباراة لقيمة الطلب الخاص بك.

وعليك أن تكون أسعد إذا منع كل هذه المجموعات داخل فئة واحدة ولا تجعل لهم بأي شكل من الأشكال.

وهذا يعني التحرك الخاص بك الروتين البحث والبحث في هذه الفئة أيضا.

لتخزين، انها غطت الجميع بالتكرار، إضافة جدول هاش والبحث. أضع هذا التعليق على مشاركة نيكولاي ل:

وتخزين عدد صحيح الجديد (التاسع + IY * 1000) كقيمة في جدول التجزئة الخاصة بك. إذا مؤشر ذ الخاص بك يمكن أن تذهب أكثر من 1000 استخدام عدد أكبر - [إينتس] كبيرة حقا. للحصول على انها تستخدم يعود التاسع = فال٪ 1000، IY = فال / 1000.

إذا يتم تغليف مجموعة وجدول هاش في نفس الفئة، والباقي من التعليمات البرمجية الخاصة بك وسوف يكون من السهل جدا أن يكتب والكثير نظافة.

وهناك عادة أي وسيلة للعثور على إحداثيات محددة من قيمة معينة إلا عن طريق الذهاب من خلال مجموعة والبحث عنه. ومع ذلك، إذا مضمونة القيم في مجموعة لتكون فريدة من نوعها (أي يحدث كل قيمة فقط في خلية واحدة)، هل يمكن الحفاظ على مجموعة منفصلة كما فهرس، الذي يخزن إحداثيات كل قيمة فهرستها من قبل القيمة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top