2010-08-17 24 views
10

Tôi cần trích xuất tất cả các phần tử trong một mảng ngoại trừ phần tử cuối cùng và lưu trữ chúng trong một vô hướng để sử dụng sau này. Lúc đầu, tôi nghĩ rằng điều này sẽ có thể sử dụng mảng lát, nhưng nó xuất hiện mà bạn không thể đếm ngược. Ví dụ:perl - làm thế nào để bạn trích xuất tất cả các phần tử của một mảng ngoại trừ cái cuối cùng?

my $foo = ($bar[0..-2]); 

hoặc

my $foo = ($bar[-2..0]); 

Bất kỳ trợ giúp sẽ được đánh giá cao vì điều này đang bắt đầu lái xe cho tôi điên, và tôi đã không thể tìm một giải pháp khác hoặc bằng cách thử nghiệm.
Oskar

+1

ITYM '@ foo' và '@bar [...]'. –

Trả lời

16

my $foo = join ',', @bar[0..$#bar-1];

sẽ tiếp nhau (bằng dấu phẩy) tất cả các yếu tố của mảng @bar trừ người cuối cùng vào foo.

Trân

RBO

+1

cảm ơn bạn đã trả lời nhanh, bạn đã dành cho tôi rất nhiều thời gian và thất vọng. –

2
@foo = @bar[0 .. $#foo - 1]; 

Nếu bạn muốn tạo một đầu scratcher:

my @x = (1, 2, 3); 
print "@x[[email protected] .. -2]"; 
2

này sẽ lưu trữ tất cả các phần tử mảng, ngoại trừ người cuối cùng, vào một vô hướng. Mỗi phần tử mảng sẽ được phân tách bằng một dấu cách.

use strict; 
use warnings; 

my @nums = 1 .. 6; 
my $str = "@nums[0 .. $#nums - 1]"; 
print $str; 

__END__ 

1 2 3 4 5 

Bạn có thực sự muốn lưu các phần tử vào mảng khác không? Nếu bạn lưu trữ chúng trong một vô hướng, nó có thể là vấn đề để lấy chúng. Trong ví dụ trên của tôi, nếu bất kỳ phần tử nào của mảng đã có một không gian đơn lẻ, bạn sẽ không thể tạo lại đúng mảng từ vô hướng.

+1

cảm ơn bạn đã trả lời tốt nhưng tôi không muốn lưu trữ chúng dưới dạng vô hướng khi tôi muốn chuyển "tên họ ban đầu" thành "họ, tên ban đầu" và đã trích xuất họ và thêm dấu phẩy vào nó, không thể lấy tên và (các) chữ cái đầu tiên. –

10
my @foo = @bar; 
pop @foo; 

hoặc

my @foo = @bar[ [email protected] .. -2 ]; 

hoặc nếu nó ok để thay đổi @bar, chỉ

my @foo = splice(@bar, 0, -1); 
+0

Cảm ơn bạn đã trả lời nhanh, tôi sẽ nhớ các ví dụ sau, chúng có thể có ích –

+0

Tôi nghĩ rằng pop đẹp hơn một chút so với việc ghép phần tử cuối cùng :) –

+0

@brian d foy: Tôi nghĩ bạn đúng:) – ysth

Các vấn đề liên quan