This is pretty much it, with one thing left. I got the original data from outside. Out of no reason, the data could be incomplete. For example, XXInfo has two members, this is the correct case. But the data I got may only contain only one member's information, with the other one totally lost. Kind like: [ Record { item = "A1", value = "0" } ] This is not a legal XXInfo, I have to deal with it. Plus, there are 28 members of XXInfo, so xxInfo of yours would be very ugly.
On Tue, Nov 3, 2009 at 9:55 AM, Daniel Fischer <daniel.is.fisc...@web.de> wrote: > Am Dienstag 03 November 2009 02:29:56 schrieb Magicloud Magiclouds: >> Hi, >> Say I have something like this: >> [ Record { item = "A1", value = "0" } >> , Record { item = "B1", value = "13" } >> , Record { item = "A2", value = "2" } >> , Record { item = "B2", value = "10" } ] >> How to convert it into: >> [ XXInfo { name = "A", value1 = "0", value2 = "2" } >> , XXInfo { name = "B", value1 = "13", value2 = "10" } ] >> If XXInfo has a lot of members. And sometimes the original data >> might be not integrity. > > Could you be a little more specific about what you want to achieve? > > As a first guess, you might use something like > > import Data.List > import Data.Ord (comparing) > import Data.Function (on) > > sortedRecords = sortBy (comparing item) records > > recordGroups = groupBy ((==) `on` (head . item)) sortedRecords > > -- now comes the tricky part, converting the groups to XXinfo > -- if all groups are guaranteed to have the appropriate number of > -- elements, you can use > xxInfo [Record (c:_) v1, Record _ v2] = XXinfo [c] v1 v2 > > -- and then > > xxInfos = map xxInfo recordGroups > > -- if the groups may have different numbers of elements, it's going to be > uglier > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe > -- 竹密岂妨流水过 山高哪阻野云飞 _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe