Tôi có một chức năng đang đi qua chuỗi tìm mẫu và thay đổi các phần của nó. Tôi có thể tối ưu hóa nó bằng cách chènlà String.Contains() nhanh hơn là đi qua toàn bộ mảng char trong chuỗi?
if (!text.Contains(pattern)) return;
Nhưng, tôi đang thực sự đi qua toàn bộ chuỗi và so sánh các bộ phận của nó với mô hình, vì vậy câu hỏi là, làm thế nào String.Contains()
thực sự hoạt động? Tôi biết có một câu hỏi như vậy - How does String.Contains work? nhưng câu trả lời là không rõ ràng. Vì vậy, nếu String.Contains()
cũng đi qua toàn bộ chuỗi ký tự và so sánh chúng với mẫu mà tôi đang tìm kiếm, nó sẽ không thực sự làm cho chức năng của tôi nhanh hơn, nhưng chậm hơn.
Vì vậy, bạn nên thử một tối ưu hóa như vậy? Và - có thể cho String.Contains()
thậm chí còn nhanh hơn chức năng mà chỉ cần đi qua toàn bộ mảng và so sánh từng ký tự đơn với một số không đổi?
Đây là mã:
public static char colorchar = (char)3;
public static Client.RichTBox.ContentText color(string text, Client.RichTBox SBAB)
{
if (text.Contains(colorchar.ToString()))
{
int color = 0;
bool closed = false;
int position = 0;
while (text.Length > position)
{
if (text[position] == colorchar)
{
if (closed)
{
text = text.Substring(position, text.Length - position);
Client.RichTBox.ContentText Link = new Client.RichTBox.ContentText(ProtocolIrc.decode_text(text), SBAB, Configuration.CurrentSkin.mrcl[color]);
return Link;
}
if (!closed)
{
if (!int.TryParse(text[position + 1].ToString() + text[position + 2].ToString(), out color))
{
if (!int.TryParse(text[position + 1].ToString(), out color))
{
color = 0;
}
}
if (color > 9)
{
text = text.Remove(position, 3);
}
else
{
text = text.Remove(position, 2);
}
closed = true;
if (color < 16)
{
text = text.Substring(position);
break;
}
}
}
position++;
}
}
return null;
}
Bạn sẽ phải đăng (phác thảo) phần còn lại của mã. Nhưng có, rất có thể bạn đang làm công việc gấp đôi ở đây. –
Tại sao bạn không thời gian cả hai phương pháp tiếp cận trong một vòng lặp for? – Habib
@Habib đó không phải là một ý tưởng tồi :) – Petr