2012-02-09 67 views
17

Nhà phát triển PHP tại đây làm việc với C#. Tôi đang sử dụng một kỹ thuật để xóa một khối văn bản khỏi một chuỗi lớn bằng cách giải mã chuỗi thành một mảng và sau đó chuyển phần tử đầu tiên ra khỏi mảng và chuyển những gì còn lại thành chuỗi.xoá phần tử đầu tiên khỏi mảng

Với PHP (một awesome & ngôn ngữ dễ dàng) nó chỉ

$array = explode('somestring',$string); 
array_shift($array); 
$newstring = implode(' ', $array); 

và tôi đang thực hiện.

Tôi rất tức giận với C# vì không cho phép tôi tạo mảng động và không cung cấp cho tôi các hàm mặc định có thể thực hiện tương tự như PHP liên quan đến mảng. Thay vì mảng động Tôi phải tạo danh sách và xác định trước cấu trúc khóa vv Nhưng tôi mới và tôi chắc chắn vẫn còn những cách duyên dáng như nhau để làm điều tương tự với C#.

Người nào đó có thể cho tôi thấy một cách rõ ràng để hoàn thành mục tiêu này với C# không?

Cụm từ câu hỏi: Làm cách nào để xóa phần tử đầu tiên khỏi mảng bằng mã C#.

Dưới đây là tôi đã nhận được bao xa, nhưng RemoveAt ném một lỗi khi gỡ lỗi vì vậy tôi không tin rằng nó hoạt động:

//scoop-out feed header information 
if (entry_start != "") 
{ 
    string[] parts = Regex.Split(this_string, @entry_start); 
    parts.RemoveAt(0); 
    this_string = String.Join(" ", parts); 
} 
+0

Câu hỏi là cách tạo một mảng không chỉ định độ dài sau khi tách chuỗi? –

+1

P.S. C# là ngôn ngữ lập trình. PHP là một ngôn ngữ kịch bản. Thiết kế khác nhau cho các mục đích khác nhau. –

+1

@atwellpub phương pháp 'RemoveAt' là dành cho các bộ sưu tập chung, không phải mảng. Intellisense thậm chí không nên cung cấp 'RemoveAt' cho mảng phần. – JYelton

Trả lời

37

tôi nhận được rất giận C# không cho phép tôi tạo mảng động

Bạn có thể xem lớp List<T>. RemoveAt của nó có thể đáng để kiểm tra.

Nhưng đối với kịch bản cụ thể của bạn chỉ đơn giản là bạn có thể sử dụng LINQ và phương pháp Skip phần mở rộng (đừng quên để thêm using System.Linq; đến tập tin của bạn để đưa nó vào phạm vi):

if (entry_start != "") 
{ 
    string[] parts = Regex.Split(this_string, @entry_start).Skip(1).ToArray(); 
    this_string = String.Join(" ", parts); 
} 
+0

Cảm ơn mọi người đã giúp đỡ và thậm chí cả sức nóng của bạn. Tôi rất biết ơn. Cảm ơn Darin! Chúc mừng! – atwellpub

4

Bạn có thể sử dụng LINQ cho điều này:

if (entry_start != "") 
    this_string = String.Join(" ", Regex.Split(this_string, @entry_start).Skip(1).ToArray()); 
11

C# không được thiết kế nhanh và bẩn, cũng không chuyên về thao tác văn bản. Hơn nữa, kỹ thuật bạn sử dụng để loại bỏ một số phần của một chuỗi từ đầu là điên imho.

Tại sao bạn không sử dụng String.Substring(int start, int length) cùng với String.IndexOf("your delimiter")?

+0

+1, Điều đó sẽ khá nhanh. –

+1

@ssg, quá nhanh có thể :) –

0

Bạn có thể thoải mái hơn với danh sách chung so với các mảng, hoạt động giống với các mảng PHP hơn.

List<T>

Nhưng nếu mục tiêu của bạn là "để loại bỏ một khối văn bản từ một chuỗi lớn" thì cách dễ dàng hơn sẽ là:

string Example = "somestring"; 
string BlockRemoved = Example.Substring(1); 
// BlockRemoved = "omestring" 

Sửa

tôi hiểu lầm câu hỏi, suy nghĩ bạn chỉ cần loại bỏ phần tử đầu tiên khỏi mảng nơi mảng bao gồm các ký tự tạo thành chuỗi.

Để tách chuỗi bằng dấu phân tách, hãy xem phương pháp String.Split thay thế. Some good examples are given here.

2
string split = ","; 
string str = "asd1,asd2,asd3,asd4,asd5"; 
string[] ary = str.Split(new string[] { split }, StringSplitOptions.RemoveEmptyEntries); 
string newstr = string.Join(split, ary, 1, ary.Count() - 1); 

chia tách tại ",". loại bỏ bản ghi đầu tiên. sau đó kết hợp lại với ""

7

Đây là mã C# tương ứng:

string input = "a,b,c,d,e"; 
string[] splitvals = input.Split(','); 
string output = String.Join(",", splitvals, 1, splitvals.Length-1); 
MessageBox.Show(output); 
+0

+1, hoạt động tốt ... – Bor691

2

Như đã trình bày ở trên, bạn có thể sử dụng LINQ. Skip(int) sẽ trả về IEnumerable<string> mà sau đó bạn có thể truyền lại thành mảng.

string[] myArray = new string[]{"this", "is", "an", "array"}; 
myArray = myArray.Skip(1).toArray(); 
Các vấn đề liên quan