| 43 |
43 |
}
|
| 44 |
44 |
}
|
| 45 |
45 |
|
|
46 |
|
| 46 |
47 |
# define ARY_SHARED_P(ary) \
|
| 47 |
48 |
(assert(!FL_TEST(ary, ELTS_SHARED) || !FL_TEST(ary, RARRAY_EMBED_FLAG)), \
|
| 48 |
49 |
FL_TEST(ary,ELTS_SHARED)!=0)
|
| ... | ... | |
| 1406 |
1407 |
|
| 1407 |
1408 |
/*
|
| 1408 |
1409 |
* call-seq:
|
|
1410 |
* array.sum -> double
|
|
1411 |
*
|
|
1412 |
* Finds the sum of all the values in <i>self</i>.
|
|
1413 |
* All of the values must be numbers,
|
|
1414 |
* otherwise, the function raises a TypeError.
|
|
1415 |
*
|
|
1416 |
* a = [1, 2, 3]
|
|
1417 |
* a.sum #=> 6
|
|
1418 |
*
|
|
1419 |
*
|
|
1420 |
*/
|
|
1421 |
|
|
1422 |
static VALUE
|
|
1423 |
rb_ary_sum(VALUE ary)
|
|
1424 |
{
|
|
1425 |
long i;
|
|
1426 |
double sum = 0.0;
|
|
1427 |
|
|
1428 |
|
|
1429 |
for (i=0; i<RARRAY_LEN(ary); i++) {
|
|
1430 |
if( TYPE(RARRAY_PTR(ary)[i]) == T_STRING) {
|
|
1431 |
rb_raise(rb_eTypeError, "Element is not a number!");
|
|
1432 |
} else {
|
|
1433 |
sum = sum + NUM2DBL(RARRAY_PTR(ary)[i]);
|
|
1434 |
}
|
|
1435 |
}
|
|
1436 |
return DBL2NUM(sum);
|
|
1437 |
}
|
|
1438 |
|
|
1439 |
/*
|
|
1440 |
* call-seq:
|
|
1441 |
* array.mean -> double
|
|
1442 |
*
|
|
1443 |
* Finds the mean of values in <i>self</i>. All values must be numbers,
|
|
1444 |
* otherwise, the function raises a TypeError.
|
|
1445 |
*
|
|
1446 |
* a = [1, 2, 3]
|
|
1447 |
* a.mean #=> 2
|
|
1448 |
*
|
|
1449 |
*/
|
|
1450 |
|
|
1451 |
static VALUE
|
|
1452 |
rb_ary_mean(VALUE ary)
|
|
1453 |
{
|
|
1454 |
return DBL2NUM(NUM2DBL(rb_ary_sum(ary)) / RARRAY_LEN(ary));
|
|
1455 |
}
|
|
1456 |
|
|
1457 |
/*
|
|
1458 |
* call-seq:
|
| 1409 |
1459 |
* array.each_index {|index| block } -> array
|
| 1410 |
1460 |
*
|
| 1411 |
1461 |
* Same as <code>Array#each</code>, but passes the index of the element
|
| ... | ... | |
| 4151 |
4201 |
rb_define_method(rb_cArray, "take_while", rb_ary_take_while, 0);
|
| 4152 |
4202 |
rb_define_method(rb_cArray, "drop", rb_ary_drop, 1);
|
| 4153 |
4203 |
rb_define_method(rb_cArray, "drop_while", rb_ary_drop_while, 0);
|
|
4204 |
|
|
4205 |
rb_define_method(rb_cArray, "sum", rb_ary_sum, 0);
|
|
4206 |
rb_define_method(rb_cArray, "mean", rb_ary_mean, 0);
|
| 4154 |
4207 |
|
| 4155 |
4208 |
id_cmp = rb_intern("<=>");
|
| 4156 |
4209 |
}
|