الزائفة رمز لالجرف التراص
-
11-07-2019 - |
سؤال
لنفترض لدي بعض بنود مرقمة تسلسليا أن وحدات 1 ن واسعة، والتي تحتاج إلى أن يتم عرضها في الصفوف. كل صف وحدات مترا. انا بحاجة الى بعض الزائفة التعليمات البرمجية التي سيتم إخراج الصفوف، بالنسبة لي، بحيث يتم الحفاظ على الحد م العرض. هذه ليست مشكلة حقيبة، والبنود يجب أن تبقى في ترتيب الرقم التسلسلي - المساحات الفارغة في نهاية الصفوف على ما يرام
.ولقد تم مطاردة الذيل الخاص بي على هذا، ويرجع ذلك جزئيا أنا في حاجة إليها في كل PHP ومسج / جافا سكريبت، وبالتالي طلب الزائفة رمز ....
المحلول
while (!items.isEmpty()) {
rowRemain = m;
rowContents = [];
while (!items.isEmpty() && rowRemain > items[0].width) {
i = items.shift();
rowRemain -= i.width
rowContents.push(i);
}
rows.push(rowContents);
}
والجري الوقت Θ (عدد سلعة)
نصائح أخرى
ومعامل هو صديقك. وأود أن تفعل شيئا مثل:
$items = array(/* Your list of stuff */);
$count = 0;
$maxUnitsPerRow = 4; // Your "m" above
while ($item = $items[$count]) {
if ($count % $maxUnitsPerRow == 0) {
$row = new row();
}
$row->addItemToRow($item);
$count++;
}
وهنا هو رمز فب البديل ...
function arrayMaxWidthString($items, $maxWidth) {
$out = array();
if (empty($items)) {
return $out;
}
$row = $maxWidth;
$i = 0;
$item = array_shift($items);
$row -= strlen($item);
$out[0] = $item;
foreach ($items as $item) {
$l = strlen($item);
$tmp = ($l + 1);
if ($row >= $tmp) {
$row -= $tmp;
$out[$i] = (($row !== $maxWidth) ? $out[$i] . ' ' : '') . $item;
} elseif ($row === $maxWidth) {
$out[$i] = $item;
++$i;
} else {
++$i;
$row = $maxWidth - $l;
$out[$i] = $item;
}
}
return $out;
}
لما يستحق، وأعتقد أن لدينا ما كنت تبحث عنه، لPHP - ولكن ليس متأكدا مما اذا كان هناك طريقة أسهل ...
<?php
// working with just a simple array of widths...
$items = array(1,1,1,2,1,1,2,1);
$row_width = 0;
$max_width = 2;
echo "Begin\n"; // begin first row
foreach($items as $item=>$item_width) {
// can we add item_width to row without going over?
$row_width += $item_width;
if($row_width < $max_width) {
echo "$item_width ";
} else if($row_width == $max_width) {
echo "$item_width";
echo "\nEnd\nBegin\n"; // end last row, begin new row
$row_width = 0;
} else if($row_width == 2* $max_width) {
echo "\nEnd\nBegin\n"; // end last row, begin new row
echo "$item_width";
echo "\nEnd\n"; // end new row
$row_width = 0;
if($item < count($items)) echo "Begin\n"; // new row
} else if($row_width > $max_width) {
echo "\nEnd\nBegin\n"; // end last row, begin new row
echo "$item_width";
$row_width = $item_width;
}
}
echo "\nEnd\n"; // end last row
?>
لا تنتمي إلى StackOverflow