{"id":31756,"date":"2022-11-11T13:28:46","date_gmt":"2022-11-11T13:28:46","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=31756"},"modified":"2022-12-23T05:45:34","modified_gmt":"2022-12-23T05:45:34","slug":"terraform-tutorials-set-data-type-and-example","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/terraform-tutorials-set-data-type-and-example\/","title":{"rendered":"Terraform Tutorials: Set data type and example"},"content":{"rendered":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>set(\u2026): a collection of unique values that do not have any secondary identifiers or ordering.<\/p>\n\n\n\n<p>Set collections are unordered and cannot contain duplicate values, so the ordering of the argument elements is lost and any duplicate values are coalesced:<\/p>\n\n\n\n<p>Since Terraform&#8217;s concept of a set requires all of the elements to be of the same type, mixed-typed elements will be converted to the most general type:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Example Code<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># Slice a set by first casting it to a list and then accessing it as a list.<\/span>\r\n\r\nvariable <span class=\"hljs-string\">\"set\"<\/span> {\r\n  type = set(string)\r\n  <span class=\"hljs-keyword\">default<\/span> = &#91;\r\n    <span class=\"hljs-string\">\"foo\"<\/span>,\r\n    <span class=\"hljs-string\">\"bar\"<\/span>,\r\n  ]\r\n}\r\n\r\noutput <span class=\"hljs-string\">\"set\"<\/span> {\r\n  value = <span class=\"hljs-keyword\">var<\/span>.set\r\n}\r\n\r\noutput <span class=\"hljs-string\">\"set_first_element\"<\/span> {\r\n  value = <span class=\"hljs-keyword\">var<\/span>.set&#91;<span class=\"hljs-number\">0<\/span>]\r\n}\r\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">How to convert list to set type?<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Function name &#8211; toset<\/p>\n\n\n\n<p>Similar kinds of complex types (list\/tuple\/set and map\/object) can usually be used interchangeably within the Terraform language, and most of Terraform&#8217;s documentation glosses over the differences between the kinds of complex type.<\/p>\n\n\n\n<p>Pass a list value to toset to convert it to a set, which will remove any duplicate elements and discard the ordering of the elements.<\/p>\n\n\n\n<p>Explicit type conversions are rarely necessary in Terraform because it will convert types automatically where required. Use the explicit type conversion functions only to normalize types returned in module outputs.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">\r\nExample\r\n\r\n&gt; toset(&#91;<span class=\"hljs-string\">\"a\"<\/span>, <span class=\"hljs-string\">\"b\"<\/span>, <span class=\"hljs-string\">\"c\"<\/span>])\r\n&#91;\r\n  <span class=\"hljs-string\">\"a\"<\/span>,\r\n  <span class=\"hljs-string\">\"b\"<\/span>,\r\n  <span class=\"hljs-string\">\"c\"<\/span>,\r\n]\r\n\r\n&gt; toset(&#91;<span class=\"hljs-string\">\"a\"<\/span>, <span class=\"hljs-string\">\"b\"<\/span>, <span class=\"hljs-number\">3<\/span>])\r\n&#91;\r\n  <span class=\"hljs-string\">\"3\"<\/span>,\r\n  <span class=\"hljs-string\">\"a\"<\/span>,\r\n  <span class=\"hljs-string\">\"b\"<\/span>,\r\n]\r\n\r\n&gt; toset(&#91;<span class=\"hljs-string\">\"c\"<\/span>, <span class=\"hljs-string\">\"b\"<\/span>, <span class=\"hljs-string\">\"b\"<\/span>])\r\n&#91;\r\n  <span class=\"hljs-string\">\"b\"<\/span>,\r\n  <span class=\"hljs-string\">\"c\"<\/span>,\r\n]<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Sets are almost similar to both tuples and lists:<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<ul class=\"wp-block-list\">\n<li>When a list or tuple is converted to a set, duplicate values are discarded and the ordering of elements is lost.<\/li>\n\n\n\n<li>When a set is converted to a list or tuple, the elements will be in an arbitrary order. If the set&#8217;s elements were strings, they will be in lexicographical order; sets of other element types do not guarantee any particular order of elements.<\/li>\n<\/ul>\n\n\n\n<p><strong>Reference<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>https:\/\/developer.hashicorp.com\/terraform\/language\/expressions\/type-constraints<\/li>\n\n\n\n<li>https:\/\/developer.hashicorp.com\/terraform\/language\/functions\/toset<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>set(\u2026): a collection of unique values that do not have any secondary identifiers or ordering. Set collections are unordered and cannot contain duplicate values, so the ordering&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[2],"tags":[],"class_list":["post-31756","post","type-post","status-publish","format-standard","hentry","category-uncategorised"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/31756","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=31756"}],"version-history":[{"count":1,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/31756\/revisions"}],"predecessor-version":[{"id":31757,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/31756\/revisions\/31757"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=31756"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=31756"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=31756"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}