Странное поведение, расщепление массивов с помощью Ruby (v1.9.2) - PullRequest
0 голосов
/ 30 января 2011

Я пытаюсь обработать массив с Ruby v1.9.2, но у него странное поведение.

Лучшее объяснение можно сделать с примерами:


ДЕЛО 1 ТЕСТ

@test1 = "image/bmp, image/gif, image/jpg".split(',')

Debug @ test1:

--- 
- image/bmp    # why this?!
- " image/gif"
- " image/jpg"

ТЕСТ 2 ИСПЫТАНИЯ

@test2 = ", image/bmp, image/gif, image/jpg".split(',')

Debug @ test2:

--- 
- ""           # why this?!
- " image/bmp"
- " image/gif"
- " image/jpg"

ЧТО МНЕ НУЖНО

Примечание: я могу использовать ТЕСТ 2, но я хотел бы сделать все правильно и лучше.

Отладка, которую я хотел бы получить:

--- 
- " image/bmp"
- " image/gif"
- " image/jpg"

Ответы [ 2 ]

2 голосов
/ 30 января 2011

В тестовом примере 1 перед «image / bmp» в результате нет пробела, поскольку в исходной строке нет пробела перед «image / bmp».

В тестовом примере 2 естьпустая строка в начале, потому что строка начинается с запятой, и для каждого разделителя в строке есть строка в результирующем массиве, содержащая то, что стоит перед этим разделителем (что в данном случае означает пустую строку).

Если вы хотите получить результат, который вы показали, вы можете просто добавить пробел (но без запятой) перед «image / bmp» в исходной строке.В качестве альтернативы вы можете разделить на /, */, а затем добавить один пробел перед каждой строкой с картой.Хотя, честно говоря, я не понимаю, почему вы хотите пробел перед каждой строкой.

1 голос
/ 30 января 2011
>> ", image/bmp, image/gif, image/jpg".split(/\s*,\s*/).select{|x| x!=""}
=> ["image/bmp", "image/gif", "image/jpg"]
...