2010-01-10 13 views
16

Lubię dołączyć do tablicy, co spowoduje "angielską listę". Na przykład ['one', 'two', 'three'] powinien spowodować 'one, two and three'.Połączyć zawartość tablicy na "angielską listę"

Napisałem ten kod, aby go osiągnąć (przy założeniu, że tablica nie jest pusty, który nie jest w mojej sytuacji)

if array.length == 1 
    result = array[0] 
else 
    result = "#{array[0, array.length].join(', ')} and #{array.last}" 
end 

ale zastanawiałem się, czy istnieje jakiś „wyprzedza” dołączyć metodę osiągnąć to zachowanie? A może jakiś krótszy/ładniejszy kod?

+0

Po prostu zastanawiasz się, czy ten projekt to euler? – Anurag

+1

Więc pytasz "Czy istnieje metoda łączenia, która używa jednego ogranicznika dla większości rzeczy, ale innego dla ostatniego elementu"? Jaki ma to cel w bibliotece rdzeniowej? –

+0

@Anurag nie to nie jest euler projektu (nie widziałem takiego pytania, ale to było dość dawno temu spojrzałem na to), ale mimo, że byłoby to rozwiązane przez mój kod, tak myślę, więc nie trzeba pytać ? – Veger

Odpowiedz

39

Taka metoda nie istnieje w rdzeniu Ruby.

To ma było implemented w szynach Aktywna biblioteka Wsparcie, choć:

['one', 'two', 'three'].to_sentence 
#=> "one, two, and three" 

Ograniczniki są konfigurowalne, a także korzysta z Rails i18n domyślnie.

Jeśli korzystasz z ActiveSupport lub Rails, jest to preferowany sposób na zrobienie tego. Jeśli twoja aplikacja nie jest Railsy, ​​twoja implementacja wydaje się w porządku tylko dla celów angielskich.

+0

Dziękuję, właśnie tego szukałem. Nie wiedziałem, że taka metoda zostanie zastosowana w Railsach (a nie w Ruby) lub dodałbym komentarz, że korzystałem z Railsów – Veger

+0

Link jest uszkodzony. I tak naprawdę, aby naprawdę wybrać, twoja wersja ma przecinek Oxford (przecinek między dwoma a trzema), podczas gdy OP nie. –

+0

Dzięki, link został zaktualizowany. Ograniczniki można konfigurować tak, jak wspomniałem. Po prostu pokazałem domyślną. – molf

8

Podobnie jak wskazówka czytelności. Możesz napisać

array[0...-1] 

, aby wybrać wszystkie oprócz ostatniego elementu.

Edytuj, zaktualizuj przykład kodu za pomocą sugestii Nicka.

+0

Nie wiedziałem o tym (wciąż jestem nowicjuszem w Rubim), ale jest to rzeczywiście lepiej czytelne. – Veger

+0

Wszyscy jesteśmy uczniami. Cieszę się, że mogłem pomóc. – akuhn

+1

Lub 'tablica [0 ...-1]' – Nick

Powiązane problemy