F#List.length总是返回1?

时间:2016-02-18 06:00:34

标签: list f#

为什么我得到如下的输出?

    if (requestCode==REQUEST_OK  && resultCode==RESULT_OK) {
            ArrayList<String> thingsYouSaid = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);

    for(String value : thingsYouSaid.get(0)){

    if(value.equalsignorecase("switch off")){
      // change value for switch to off

       break;
    }
    else if(value.equalsignorecase("switch on")){
    // change value for switch to on
    break;
    }


 }

我希望得到3分和4分!我使用了错误的函数调用吗?

1 个答案:

答案 0 :(得分:16)

这与功能无关 - 它与您输入列表项目的方式有关。您使用,代替;

> List.length [1,2,3];;
val it : int = 1
> List.length [1;2;3];;
val it : int = 3

原因是[1,2,3]是一个元组列表,只有一个项目:

> [1,2,3];;
val it : (int * int * int) list = [(1, 2, 3)]

请参阅输出中的(..) - 遗憾的是,您可以输入(..)以外的元组,而且很多都可以输入

如果您使用;,则会获得包含3个元素的整理列表

> [1;2;3];;
val it : int list = [1; 2; 3]