reading file byLine
deed via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri Sep 4 04:50:20 PDT 2015
On Friday, 4 September 2015 at 07:27:54 UTC, Namal wrote:
> On Friday, 4 September 2015 at 01:55:13 UTC, deed wrote:
>> On Friday, 4 September 2015 at 01:31:28 UTC, Namal wrote:
>>> How can I get just the maximum element? Do I need to give a
>>> range for it?
>>
>> Use max?
>> http://dlang.org/phobos/std_algorithm_comparison.html#max
>
> Sorry, I don't understand the syntax yet. How do I tell max to
> search all elements?
You can search all elements by using reduce
http://dlang.org/phobos/std_algorithm_iteration.html#reduce
> I mean, why does sort(myarray) is legit and max(myarray) isn't.
I don't know why, other than that is the current design in Phobos.
import std.algorithm, std.range, std.array, std.string, std.stdio,
std.conv;
int[] arr1 = [1, 2, 30];
//arr1.max.writeln; // Doesn't work, as you say
arr1.reduce!max.writeln; // This does. Prints 30.
int[] arr2 = [4, 5, 6];
int[][] arr = [arr1, arr2];
arr.reduce!max.writeln; // Returns either arr1 or arr2.
Element by
// element comparison until one is
greatest.
// Prints arr2, since 1 < 4.
arr.joiner.reduce!max.writeln; // Flattens arr1 and arr2 to one
arr and
// finds max. Prints 30.
//For your example:
auto f = File("filename", "r");
auto numbers = f // 1 2 3\n4 5 6
.byLine // ["1 2 3", "4 5 6"]
.map!(a => a.split) // [["1", "2", "3"], ["4", "5", "6"]]
.map!(a => a.to!(int[]))// [[1, 2, 3], [4, 5, 6]]
.array; // Allocates and puts the elements
into an
// int[][] for reuse of state.
numbers // [[1, 2, 3], [4, 5, 6]]
.map!(reduce!max) // [3, 6]
.writeln; // prints [3, 6]
numbers // [[1, 2, 3], [4, 5, 6]]
.joiner // [1, 2, 3, 4, 5, 6]
.reduce!max // 6
.writeln; // prints 6
More information about the Digitalmars-d-learn
mailing list