• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Custom IC SKILL
  3. Reformatting of a list

Stats

  • Locked Locked
  • Replies 4
  • Subscribers 143
  • Views 14104
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Reformatting of a list

Frederic Drape
Frederic Drape over 9 years ago

Hi everybody,

I have a list that look something like that:

list1 = list(list("a" "1" "1") list("a" "1" "2") list("a" "2" "3") list("b" "5" "5") list("b" "5" "6") list("b" "7" "8"))

and I want this list to be reformatted to look like that:

list2 = list(list("a" list("1,1" "1,2" "2,3")) list("b" list("5,5" "5,6" "7,8")))


Anybody have an elegant way of doing that???

Thanks

Fred

  • Cancel
  • dmay
    dmay over 9 years ago

    Here is one way to do it:

    list1 = list(list("a" "1" "1") list("a" "1" "2") list("a" "2" "3") list("b" "5" "5") list("b" "5" "6") list("b" "7" "8"))
    tbl = makeTable("test" nil)
    foreach(x list1 tbl[car(x)] = append1(tbl[car(x)] buildString(cdr(x) ",")))
    list2 = tableToList(tbl)

    A couple of comments about this:

    1. I try to avoid "append" and "append1" as much as possible for performance reasons. The "cons" command is usually a better choice, but it adds to the front of the list. In this case, your list is short so if we know that will always be the case, this will work.

    2. I prefer tables to complicated lists. Your list2 table looks like a key/value pair, so maybe you don't need the final "tableToList" command and can work with the table instead. Tables are much more efficient and in this case it is a cleaner simpler structure.

    3. If what you are describing has to do with lists of points, then there are more things I would change.

    I hope that helps.

    Derek

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Frederic Drape
    Frederic Drape over 9 years ago

    Thanks Derek,

    I work on it this morning and end up using the exact same code that you propose!

    I never use the makeTable before, so I was not really confident using it.

    3. If what you are describing has to do with lists of points, then there are more things I would change.

    For my personal curiosity, what would you modify?

    Thanks.

    Regard.

    Fred

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • dmay
    dmay over 9 years ago

    First of all, the numbers would not be quoted strings.

    Secondly, a list of coordinates is essentially a list of list-pairs. The coordinates "1,1" "1,2" "2,3" would be represented in lists like this:
    list(list(1 1) list(1 2) list(2 3))

    Skill allows you to simplify a coordinate list-pair with a colon, so a simpler implementation of the above is:
    list(1:1 1:2 2:3)

    Therefore, your table could simply be:
    tbl["a"] = list(1:1 1:2 2:3)
    tbl["b"] = list(5:5 5:6 7:8)

    Since these are numbers, you could provide this list of points to dbCreatePolygon directly. In your string based example, you'd have to parse the data to produce usable coordinates for other Skill commands.

    Derek

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Frederic Drape
    Frederic Drape over 9 years ago

    OK got it.

    Unfortunatly my list came from a text import and do not represent coordinate pair, so I am stuck with the parsing.

    Thanks for the clarification, it's greatly appriciate.

    Regard.

    Fred

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information