Xcode 8.3.1 - Swift 3
Это принятый ответ paulvs, преобразованный в Swift 3:
let myGroup = DispatchGroup()
override func viewDidLoad() {
super.viewDidLoad()
for i in 0 ..< 5 {
myGroup.enter()
Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"]).responseJSON { response in
print("Finished request \(i)")
myGroup.leave()
}
}
myGroup.notify(queue: DispatchQueue.main, execute: {
print("Finished all requests.")
})
}
Для однострочника Perl это в основном то же самое, что и решение awk
в ответ Аймана Хурье :
% perl -nle '$sum += $_ } END { print $sum'
Если вам интересно, что делают однострочники Perl, вы можете удалить их:
% perl -MO=Deparse -nle '$sum += $_ } END { print $sum'
Результатом является более подробная версия программы в форме, которую никто бы никогда не написал самостоятельно:
BEGIN { $/ = "\n"; $\ = "\n"; }
LINE: while (defined($_ = <ARGV>)) {
chomp $_;
$sum += $_;
}
sub END {
print $sum;
}
-e syntax OK
Просто для смеха я попробовал это с файлом, содержащим 1 000 000 чисел (в диапазоне 0 - 9 999). На моем Mac Pro он возвращается практически мгновенно. Это очень плохо, потому что я надеялся, что использование mmap
будет действительно быстрым, но в то же время:
use 5.010;
use File::Map qw(map_file);
map_file my $map, $ARGV[0];
$sum += $1 while $map =~ m/(\d+)/g;
say $sum;
Я не мог просто пройти мимо... Вот моя острота Haskell. Это на самом деле довольно читаемо:
main = (sum <[110]gt; (read <[110]gt;) <[110]gt; lines <[110]gt; getContents) >>= print
Для разъяснения мы читаем весь вход (getContents), разделите его строками, читайте как числа и сумма. <[113]gt;
fmap оператор - мы используем его вместо обычного функционального приложения, потому что уверенный это все происходит в IO. read
потребности дополнительный fmap, потому что это находится также в списке.
, К сожалению, нет никакого ghci -e
, чтобы просто выполнить его, таким образом, этому нужны основная функция и компиляция.
$ ghc sum.hs
[1 of 1] Compiling Main ( sum.hs, sum.o )
Linking sum ...
$ ./sum
1.3
2.1
4.2
7.6000000000000005
Вот странное обновление, чтобы заставить его работать с плаваниями:
main = ((0.0 + ) <[112]gt; sum <[112]gt; (read <[112]gt;) <[112]gt; lines <[112]gt; getContents) >>= print
Вы можете использовать awk :
awk '{ sum += $1 } END { print sum }' file
Я не знаю, сможете ли вы получить что-то лучшее, учитывая, что вам нужно прочитать файл целиком.
$sum = 0;
while(<>){
$sum += $_;
}
print $sum;
Вот еще один однострочник
( echo 0 ; sed 's/$/ +/' foo ; echo p ) | dc
Предполагается, что числа являются целыми числами. Если вам нужны десятичные дроби, попробуйте
( echo 0 2k ; sed 's/$/ +/' foo ; echo p ) | dc
Отрегулируйте 2 до необходимого количества десятичных знаков.
Чтобы быть смешным:
cat f | tr "\n" "+" | perl -pne chop | R --vanilla --slave
Это прямой Bash:
sum=0
while read -r line
do
(( sum += line ))
done < file
echo $sum
Я не тестировал это, но он должен работать:
cat f | tr "\n" "+" | sed 's/+$/\n/' | bc
Возможно, вам придется добавить "\ n" к строке перед bc (например, через эхо), если bc не обрабатывает EOF и EOL ...