Упрощенный подход заключается в том, чтобы иметь способ сохранить заголовок.
Допустим, у вас есть файл .csv like:
user, topic, hits
om, scala, 120
daniel, spark, 80
3754978, spark, 1
Мы можем определить класс заголовка который использует анализируемую версию первой строки:
class SimpleCSVHeader(header:Array[String]) extends Serializable {
val index = header.zipWithIndex.toMap
def apply(array:Array[String], key:String):String = array(index(key))
}
Чтобы мы могли использовать этот заголовок для адресации данных дальше по дороге:
val csv = sc.textFile("file.csv") // original file
val data = csv.map(line => line.split(",").map(elem => elem.trim)) //lines in rows
val header = new SimpleCSVHeader(data.take(1)(0)) // we build our header with the first line
val rows = data.filter(line => header(line,"user") != "user") // filter the header out
val users = rows.map(row => header(row,"user")
val usersByHits = rows.map(row => header(row,"user") -> header(row,"hits").toInt)
...
Обратите внимание, что header
не намного больше, чем простое отображение мнемоники на индекс массива. Практически все это можно сделать на порядковом месте элемента в массиве, например user = row(0)
PS: Добро пожаловать в Scala: -)
#include <limits.h>
int x = INT_MAX;
РЕДАКТИРОВАТЬ: ответил до того, как спрашивающий пояснил, я просто догадывался, какой тип они хотели.
Существует файл с именем limits.h (по крайней мере, в Linux есть), который содержит такое определение, например
/* Maximum value an `unsigned short int' can hold. (Minimum is 0.) */
# define USHRT_MAX 65535
/* Minimum and maximum values a `signed int' can hold. */
# define INT_MIN (-INT_MAX - 1)
# define INT_MAX 2147483647
/* Maximum value an `unsigned int' can hold. (Minimum is 0.) */
# define UINT_MAX 4294967295U
Поскольку в этом вопросе есть тег C ++, я предлагаю numeric_limits:
#include <limits>
unsigned x = std::numeric_limits<unsigned>::max();
Безусловно, самый простой способ получить наибольшее значение для целочисленного типа без знака. заключается в приведении (-1) к этому типу. Стандарт (§6.2.5 / 9) требует, чтобы беззнаковые математические вычисления выполнялись по модулю числа, на единицу большего, чем наибольшее значение, которое может быть представлено, поэтому для любого беззнакового типа T
выражение ( (T) -1)
обязательно будет наибольшим возможным значением в этом типе.
Обычно это делается в 1.0/0.0
, но вы можете получить предупреждение о компиляции. Я не знаю других переносимых способов сделать это в C89, но в C99 есть макрос FP_INFINITE
в math.h
.
EDIT: Очевидно, Сэм на самом деле хотел не бесконечность, а целочисленные пределы, которые можно найти в limits.h
, как указали другие.
Если включить E_NOTICE сообщения об ошибках, PHP расскажет вам о неинициализированных переменных:
ini_set("error_reporting", E_ALL);
Неинициализированные немного отличаются от незаявленных, но должны дать вам аналогичный эффект.
-121--3941945-Я использовал http://beanstalkapp.com/ и нашел его хорошим для размещения проектов. Вы определенно должны взглянуть на них, если вам действительно нужно придерживаться SVN.
-121--4536286- На основании ваших комментариев, вы хотите без знака int
(хотя вы говорите «без знака целое число», так что, возможно, вы хотите интегральное значение, не обязательно без знака int
).
В C для неподписанного интегрального типа значение -1
при преобразовании в этот тип гарантированно является наибольшим значением этого типа:
size_t size_max = -1;
unsigned int uint_max = -1;
unsigned long ulong_max = -1;
присвойте переменным значения SIZE _ MAX
, UINT _ MAX
и ULONG _ MAX
соответственно. В общем, вы должны включить limits.h
и использовать соответствующий макрос, но приятно знать правило выше. Кроме того, SIZE _ MAX
не находится в C89, поэтому size _ t size_max = -1;
будет работать как в C89, так и в C99.
Обратите внимание, что поведение переполнения гарантируется только для неподписанных интегральных типов.
Я обычно использую макросы * _MAX
из ] limits.h
INT_MAX
для целых чисел и т. д. Они всегда будут правильно установлены для типа переменной. Даже типы с явно заданным размером, такие как uint32, будут иметь соответствующие записи в этом заголовочном файле.
Это самое большое возможное значение, которое может содержать переменная этого типа.
Для целого числа без знака, как вы просили в своем вопросе, вы должны использовать UINT_MAX
Думаю, вы можете проверить эту ссылку:
http://www.gnu.org/s/libc/manual/html_node/ Infinity-and-NaN.html
Я сделал это, и он отлично работает на gcc 4.4.1
#include "math.h"
int main(int argc, char**argv)
{
int x = INFINITY;
return 0;
}