我有元组type foo = (string, string);
。
如何创建foo
元组的类型数组?
使用元组数组或元组列表有什么区别?
如何访问元组值数组? JS模拟:
const foo1 = [1, 2];
const foo2 = [3, 4];
const arrayOfFoo =[foo1, foo2];
console.log(arrayOfFoo[0][0]) // 1
console.log(arrayOfFoo[1][1]) // 4
更新:我找到了优秀的gitbook
https://kennetpostigo.gitbooks.io/an-introduction-to-reason/content/
/* create tuple type*/
type t = (int, int);
/* create array of tuples */
type arrayOfT = array t;
/* create array of tuples */
type listOfT = list t;
/* create list of tuples value */
let values: listOfT = [(0, 1), (2, 3)];
/* get first tuple */
let firstTyple: t = List.nth values 0;
/* get first tuple values */
let (f, s) = firstTyple;
这是对的吗?有没有更有用的方法呢?
答案 0 :(得分:4)
let x: list (int, int) = [(1,2), (3,4)] /* etc */
2
Array
固定长度&可变,并提供简单的随机访问。它与JavaScript列表非常相似。将它用于需要随机访问(读/写)的内容远远超过追加/弹出。List
是一个单链表&是不可改变的。来自功能传统的人们会很熟悉。将它用于访问第一个元素或从正面推送/弹出比随机访问更常见的事情。在实践中,我使用List几乎所有东西,但是对于一些性能密集的情况使用Array。
3
从列表中获取第一件事是非常常见的。通常,你想要先做第一件事,然后用"休息"做一些事情。的清单。要彻底,您还需要处理列表为空的情况。这是什么样的:
switch (somelist) {
| [] => Js.log "nothing there" /* what we do if the list is empty */
| [firstItem, ...rest] => Js.log firstItem /* we have things! */
}
如果你只是想得到第一个项目,并且你的程序崩溃,如果它是空的,那么你可以List.hd mylist
。
从元组中获取项目就像放置let (a, b) = sometuple
一样。如果你只关心第一个,你可以let (a, _) = sometuple
(_
是一个特殊的占位符,意味着"我不在乎这是什么")。对于长度为2的元组,有一些特殊的辅助函数fst
和snd
,它们可以为您提供第一和第二项。