Ticket UUID: | 0d2bcd9544735adea2d2c3aabd5f0d1e222cb4fc | |||
Title: | "lgroup" to regroup a list | |||
Type: | RFE | Version: | ||
Submitter: | anonymous | Created on: | 2014-01-12 00:21:31 | |
Subsystem: | 17. Commands I-L | Assigned To: | dkf | |
Priority: | 5 Medium | Severity: | Minor | |
Status: | Closed | Last Modified: | 2016-03-06 15:25:17 | |
Resolution: | None | Closed By: | anonymous | |
Closed on: | 2016-03-06 15:25:17 | |||
Description: |
~ Prototype lgroup listIn lengthOfSublist ?stepForward? stepForward defaults to $lengthOfSublist ~ Example set l {a b c d e f g h} lgroup $l 4 # {a b c d} {e f g h} lgroup $l 3 # {a b c} {d e f} {g h} lgroup $l 1 # a b c d e f g h lgroup $l 0 # {a b c d e f g h} lgroup $l -1 # error lgroup $l 3 2 # {a b c} {c d e} {e f g} {g h} lgroup $l 2 3 # {a b} {d e} {g h} ~ Usefulness This can be used to rearrange results returned by SQLite3. ~ Incomplete implementation Since I just use it to process what SQLite3 returns, I have ignored the "stepForward". I think rewrite it in C will speed it up. I didn't check whether $lengthOfSublist is a negative number or zero. proc lgroup {listIn lengthOfSublist} { set i 0 foreach it $listIn { lappend tmp $it if {[llength $tmp] == $lengthOfSublist} { lappend result $tmp set tmp {} } incr i } if {[llength $listIn] % $lengthOfSublist} { lappend result $tmp } return $result } | |||
User Comments: |
anonymous added on 2016-03-06 15:25:17:
I'm the reporter. Since this is not quite appropriate for the Tcl core, I'm closing this ticket. dkf added on 2014-01-12 21:56:37: Don't worry about getting performance or the C implementation. Worry about why and what (i.e., a clear justification for this command and an exact specification of the behaviour). |