Почему фильтр для списка строк вызывает здесь ошибку

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

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."]

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

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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);

Ваш первый вариант slist = slist.filter!(a => a.length>1).array; не работает: Error: no property array for type FilterResult!(__lambda1, string[]) . Второй вариант auto slist2 = slist.filter!(a => a.length>1); работает.

rnso 13.06.2019 17:18

Вам нужно импортировать std.array.

Vladimir Panteleev 13.06.2019 18:22

Да, теперь это работает. Я бы хотел, чтобы сообщение об ошибке сообщило мне об этом.

rnso 13.06.2019 18:57

В некотором смысле это так cannot implicitly convert expression filter(slist) of type FilterResult!(__lambda1, string[]) to string[], но я понимаю ваше разочарование. У меня была такая же проблема несколько недель назад, и мне пришлось копаться в сообщениях на форуме, чтобы понять это.

abaga129 14.06.2019 18:01

Как вы ожидаете, что компилятор скажет вам «вам нужно импортировать std.array»??

DejanLekic 19.06.2019 11:57

Другие вопросы по теме