# StructNew

Creates a new struct of the specified type.

The available types are:

* casesensitive
* default
* ordered-casesensitive
* ordered
* soft
* sorted
* weak

## Method Signature

```
StructNew(type=[string], sortType=[any], sortOrder=[string], localeSensitive=[any], callback=[function:Comparator])
```

### Arguments

| Argument          | Type                  | Required | Description                                                                                        | Default   |
| ----------------- | --------------------- | -------- | -------------------------------------------------------------------------------------------------- | --------- |
| `type`            | `string`              | `false`  | The struct type                                                                                    | `default` |
| `sortType`        | `any`                 | `false`  | An optional sort type to apply to that type                                                        |           |
| `sortOrder`       | `string`              | `false`  | The sort order applicable to the sortType argument                                                 | `asc`     |
| `localeSensitive` | `any`                 | `false`  |                                                                                                    | `false`   |
| `callback`        | `function:Comparator` | `false`  | An optional callback to use as the sorting function. You can alternatively pass a Java Comparator. |           |

## Examples

### New struct using literal notation

Creates an unordered struct.

[Run Example](https://try.boxlang.io/?code=eJwrzcsvSkktSk1RsFWoVuDidFSwUjDU4eJ0BtLGQNoJSBtx1VpzlRdllqS6lOYWaCiUwvVoWnMBAC8kEWc%3D)

```java
unordered = { 
	A : 1,
	C : 3,
	B : 2
};
writeDump( unordered );

```

### New struct using function

Creates an unordered struct.

[Run Example](https://try.boxlang.io/?code=eJwrzcsvSkktSk1RsFUoLikqTS7xSy3X0LTmKoVJ6DkCpQyRBZyAAkbIAs5AAWNrrvKizJJUl9LcAg0FuJwC0CgAniYgjg%3D%3D)

```java
unordered = structNew();
unordered.A = 1;
unordered.B = 2;
unordered.C = 3;
writeDump( unordered );

```

### New ordered struct using literal notation

CF2016+ Creates an ordered struct. Note the square brackets.

[Run Example](https://try.boxlang.io/?code=eJzLL0pJLUpNUbBViFbg4nRUsFIw1OHidALSRkDaGUgbc8Vac5UXZZakupTmFmgo5EN1aFpzAQDI2Q9h)

```java
ordered = [ 
	A : 1,
	B : 2,
	C : 3
];
writeDump( ordered );

```

### New ordered struct using function

Creates an ordered struct.

[Run Example](https://try.boxlang.io/?code=eJzLL0pJLUpNUbBVKC4pKk0u8Ust11BQyoeIKiloWnNB2XqOQDWGCK4TkGuE4DoDucbWXOVFmSWpLqW5BRoKUBmQEQB8Th%2BI)

```java
ordered = structNew( "ordered" );
ordered.A = 1;
ordered.B = 2;
ordered.C = 3;
writeDump( ordered );

```

### New ordered struct using literal notation

Creates an ordered struct.

```java
ordered = [];
ordered.A = 1;
ordered.B = 2;
ordered.C = 3;
writeDump( ordered );

```

### New case-sensitive struct using function

CF2021+ Creates a case-sensitive struct.

[Run Example](https://try.boxlang.io/?code=eJxLTixOLU7NK84sySxLVbBVKC4pKk0u8Ust11BQSkaWU1LQtOZCEdFzBKo3RBd0AgoaoQs6AwWNrbnKizJLUl1Kcws0FFDkQUYDAPspLu4%3D)

```java
casesensitive = structNew( "casesensitive" );
casesensitive.A = 1;
casesensitive.B = 2;
casesensitive.C = 3;
writeDump( casesensitive );

```

### New case-sensitive struct using literal notation

CF2021+ Creates a case-sensitive struct.

```java
casesensitive = $;
{
	A : 1,
	B : 2,
	C : 3
};
writeDump( casesensitive );

```

### New ordered and case-sensitive struct using function

CF2021+ Creates a case-sensitive struct.

[Run Example](https://try.boxlang.io/?code=eJwrzs9NDS4pKk0uUbBVKAYz%2FFLLNRSU8otSUotSU3STE4tTi1PzijNLMstSlRQ0rbmK4Vr0nIGajFFEnIAiRigijkARQ2uu8qLMklSX0twCDQWEJMg4AJpRK88%3D)

```java
someStruct = structNew( "ordered-casesensitive" );
someStruct.C = 3;
someStruct.B = 2;
someStruct.A = 1;
writeDump( someStruct );

```

### New ordered and case-sensitive struct using literal notation

CF2021+ Creates an ordered and case-sensitive struct.

```java
someStruct = $;
[
	C : 3,
	B : 2,
	A : 1
];
writeDump( someStruct );

```

### Additional Examples

```java
dump( var=structNew( "soft" ), label="soft" );
dump( var=structNew( "weak" ), label="weak" );
dump( var=structNew( "linked" ), label="linked" );
st = {
	"one" : [
		1,
		2,
		3
	],
	"two" : {
		"three" : QueryNew( "id" )
	},
	THREE : "unquoted keys don't preserve case"
};
dump( st );
dump( structKeyList( st ) );
dump( structKeyExists( st, "one" ) );
// shorthand syntax for a new empty ordered struct, [=] also works
st = [];
st.C = 1;
st.B = 2;
st.A = 3;
dump( st );
// shorthand syntax for an ordered struct with values
st = [
	C : 1,
	B : 2,
	A : 3
];
dump( st );

```

```java
<bx:set st = structNew() >

<bx:set st[ "name" ] = "John Doe" >
<bx:set st[ "age" ] = 30 >
<bx:set st[ "city" ] = "New York" >

<bx:dump var="#st#">
```

## Related

* [StructAppend](/boxlang-language/reference/built-in-functions/struct/structappend.md)
* [StructClear](/boxlang-language/reference/built-in-functions/struct/structclear.md)
* [StructCopy](/boxlang-language/reference/built-in-functions/struct/structcopy.md)
* [StructDelete](/boxlang-language/reference/built-in-functions/struct/structdelete.md)
* [StructEach](/boxlang-language/reference/built-in-functions/struct/structeach.md)
* [StructEquals](/boxlang-language/reference/built-in-functions/struct/structequals.md)
* [StructEvery](/boxlang-language/reference/built-in-functions/struct/structevery.md)
* [StructFilter](/boxlang-language/reference/built-in-functions/struct/structfilter.md)
* [StructFind](/boxlang-language/reference/built-in-functions/struct/structfind.md)
* [StructFindKey](/boxlang-language/reference/built-in-functions/struct/structfindkey.md)
* [StructFindValue](/boxlang-language/reference/built-in-functions/struct/structfindvalue.md)
* [StructGet](/boxlang-language/reference/built-in-functions/struct/structget.md)
* [StructGetMetadata](/boxlang-language/reference/built-in-functions/struct/structgetmetadata.md)
* [StructInsert](/boxlang-language/reference/built-in-functions/struct/structinsert.md)
* [StructIsCaseSensitive](/boxlang-language/reference/built-in-functions/struct/structiscasesensitive.md)
* [StructIsOrdered](/boxlang-language/reference/built-in-functions/struct/structisordered.md)
* [StructKeyArray](/boxlang-language/reference/built-in-functions/struct/structkeyarray.md)
* [StructKeyExists](/boxlang-language/reference/built-in-functions/struct/structkeyexists.md)
* [StructKeyList](/boxlang-language/reference/built-in-functions/struct/structkeylist.md)
* [StructKeyTranslate](/boxlang-language/reference/built-in-functions/struct/structkeytranslate.md)
* [StructMap](/boxlang-language/reference/built-in-functions/struct/structmap.md)
* [StructNone](/boxlang-language/reference/built-in-functions/struct/structnone.md)
* [StructReduce](/boxlang-language/reference/built-in-functions/struct/structreduce.md)
* [StructSome](/boxlang-language/reference/built-in-functions/struct/structsome.md)
* [StructSort](/boxlang-language/reference/built-in-functions/struct/structsort.md)
* [StructToQueryString](/boxlang-language/reference/built-in-functions/struct/structtoquerystring.md)
* [StructToSorted](/boxlang-language/reference/built-in-functions/struct/structtosorted.md)
* [StructUpdate](/boxlang-language/reference/built-in-functions/struct/structupdate.md)
* [StructValueArray](/boxlang-language/reference/built-in-functions/struct/structvaluearray.md)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://boxlang.ortusbooks.com/boxlang-language/reference/built-in-functions/struct/structnew.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
