2015-05-15 3 views
0

В чем заключаются различия между кортежами F # и структурами. Они могут содержать несколько переменных, но я просто хочу знать, когда один из них используется над другим.F # Когда вы должны использовать кортеж и когда вы должны использовать struct?

Чтобы быть более конкретным, я пытаюсь передать кучу параметров через кучу функций с новой накапливаемой переменной. Например, я начинаю с param1 и передаю его в func1, который возвращает (param1, param2). Затем этот кортеж (или struct) передается func2, который возвращает (param1, param2, param3) и т. Д.

Мои текущие мысли таковы: с кортежем я всегда могу держать только правильное количество аргументов, но я отказываюсь от единого формата данных, и в конце концов мне придется упаковать и переупаковать кортеж около 10 элементов. С struct я имею преимущество однородности параметров, но проблемы в том, что мне нужно было бы указать параметры в начале.

+4

Какой язык? –

+3

Это должно быть закрыто как: слишком широкое, непонятное, о чем вы спрашиваете, и в первую очередь на основе мнения – mjs

+2

Ответ на коленный рефлекс таков, что на большинстве языков кортежи просто упорядочены, тогда как структуры имеют имена членов. Обычно это сводится к синтаксису накладных расходов по сравнению с выразительностью, с оговоркой, что структуры часто должны быть формально определенным типом, тогда как кортежи могут быть очень неформальными. Но полный ответ будет зависеть от языка, а «лучше использовать» в первую очередь основан на мнениях. – Tommy

ответ

5

В F # кортежи представлены с использованием Tuple<T1, T2>, который является ссылочным типом. С другой стороны, структуры являются типами значений, и поэтому они выделяются на стеке, а не на кучу (что иногда может быть быстрее). Итак, мои общие правила:

  • Кортежи имеют хорошую синтаксическую поддержку в F #, поэтому по умолчанию используются кортежи, потому что они делают ваш код приятнее. В большинстве случаев производительность аналогична, и вам не нужно беспокоиться об этом (это зависит от использования - кортежи не всегда медленнее).
  • Когда ваши кортежи становятся более сложными (скажем, более 3 элементов), имеет смысл использовать тип с именованными членами (например, запись или тип объекта).
  • При распределении большого массива кортежей или структур лучше использовать структуры. Вы можете либо определить свою собственную структуру, либо использовать стандартные .NET-структуры, такие как KeyValuePair<K, V>.

Чтобы дать отрывочные данные, в Deedle мы используем для структур внутренних органов (временные ряды хранятся в виде массива структур), но не для публичного API, который использует кортежи.

Смежные вопросы