Building arrays with only std constructs is a bit unpleasant currently, in large part due to the absence of const generics (which are being worked on!). You may want to look into helper crates like stackvec and arrayvec which make the job easier, given the usual limitation to small arrays only.
You cannot (infaillibly) collect an iterator into an array because the number of items which the iterator will produce is not known in advance and may be less than the size of the array.
Faillible collection is not provided by std yet, because it can't be implemented in a general way yet due to lack of const generics. But the functionality is provided for small arrays by helper crates like stackvec.
Another track which I'm currently exploring is to provide a special kind of iterator that knows its length at compile-time.