如何按连续相同is_author值分组消息?JS/PHP有什么高效实现方案?
消息连续分组转换实现方案
两种实现均为单次遍历方案,时间复杂度为O(n),空间复杂度为O(n),没有冗余计算,性能最优。
JavaScript 实现
function groupMessages(messages) { const result = []; let currentGroup = null; for (const msg of messages) { const { is_author, ...msgData } = msg; if (!currentGroup || currentGroup.is_author !== is_author) { currentGroup = { is_author, messages: [] }; result.push(currentGroup); } currentGroup.messages.push(msgData); } return result; }
直接传入原始消息数组调用即可得到符合要求的输出结构。
PHP 实现
function groupMessages(array $messages): array { $result = []; $currentGroup = null; foreach ($messages as $msg) { $isAuthor = $msg['is_author']; $msgData = $msg; unset($msgData['is_author']); if ($currentGroup === null || $currentGroup['is_author'] !== $isAuthor) { unset($currentGroup); $currentGroup = [ 'is_author' => $isAuthor, 'messages' => [] ]; $result[] = &$currentGroup; } $currentGroup['messages'][] = $msgData; } unset($currentGroup); return $result; }
内容的提问来源于stack exchange,提问作者Alex Oraniewsky
相关产品推荐
相关产品推荐

