Имея следующий фрагмент кода:Как взять карту в конкретный элемент после карты и сплит?
import std.algorithm;
import std.array : split;
import std.stdio;
import std.file;
import std.range;
void main(string[] args)
{
string filename = "file.log";
string term = "action";
auto results = File(filename, "r")
.byLine
.filter!(a => canFind(a, term))
.map!(a => splitter(a, ":"));
// now how to take only first part of split? up to first ':'?
foreach (line; results)
writeln(line);
}
Я заинтересован только в первой части после раскола операции (или какой-либо другой операции, которая могла бы быть более эффективным - просто найти первый :
и извлечь все символы до него).
Я пытался что-то вроде:
.map!(a => a[0])
после раскола, но я получил ошибку
main.d(37): Error: no [] operator overload for type Result
/usr/include/dmd/phobos/std/algorithm/iteration.d(488): instantiated from here: MapResult!(__lambda4, MapResult!(__lambda3, FilterResult!(__lambda2, ByLine!(char, char))))
main.d(37): instantiated from here: map!(MapResult!(__lambda3, FilterResult!(__lambda2, ByLine!(char, char))))
вместо '.map! (A => splitter (a,": ").) 'с' .map! (a => a.until (':')) 'как-то испортил мои результаты: я получаю несортированные данные (при сортировке в качестве ввода). – Patryk
Это может быть вызвано нестабильностью результата byLine, вы можете попробовать 'a => a.idup.until (':')' – weltensturm
То же самое:/Полный код фрагмента https://dpaste.dzfl.pl/d2cc511bd7cb – Patryk