Почему фильтр для списка строк вызывает ошибку здесь - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь отфильтровать список строк, чтобы получить только те из них, которые имеют длину более одной, используя следующий код:

import std.stdio;
import std.string;
import std.algorithm;

void main(){
    auto slist = ["a","aa","b","bb","c","cc","dd",]; 
    slist = slist.filter!(a => a.length>1);     // does not work; 
    writeln(slist); 
}

Однако создается ошибка:

$ rdmd soq_map_filter_strlist.d
soq_map_filter_strlist.d(7): Error: cannot implicitly convert expression filter(slist) of type FilterResult!(__lambda1, string[]) to string[]
Failed: ["/usr/bin/dmd", "-v", "-o-", "soq_map_filter_strlist.d", "-I."]

Где проблема и как ее можно решить? Спасибо за вашу помощь.

1 Ответ

2 голосов
/ 13 июня 2019

filter возвращает ленивый диапазон, который не может быть неявно преобразован обратно в string[].Вы можете либо присвоить его новой переменной, либо вычислить его в массив, используя std.array.array:

slist = slist.filter!(a => a.length>1).array;
writeln(slist);

- или -

auto slist2 = slist.filter!(a => a.length>1);
writeln(slist2);
...